PMG

Форумы по созданию игр
Текущее время: 29 мар 2024 08:53

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Урок 38. Загрузка текстур из файла ресурсов и текстурировани
СообщениеДобавлено: 10 янв 2008 01:35 
Не в сети
Новичок

Зарегистрирован: 09 янв 2008 23:14
Сообщения: 4
Вначале скажу, что это очень хороший ресурс, будучи преподавателем, я бы рекомендовал бы своим студентам , вы молодцы !

Вот моя проблема :
Сделал всё, как описано в этом уроке, засунул картинки в проект , в общем, всё-всё-всё.

Пишет ошибку:

2.cpp(220) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

В чем проблема-то ?


Если в настройках проекта убрать precompiled headers file, то пишет :

2.cpp(220) : fatal error C1004: unexpected end of file found

А если не убирать в настройках precompiled headers file, а просто прописать #include <stdafx.h>, то


2.cpp(48) : error C2065: 'rand' : undeclared identifier
2.cpp(67) : error C2065: 'byte' : undeclared identifier
2.cpp(67) : error C2146: syntax error : missing ';' before identifier 'Texture'
2.cpp(67) : error C2065: 'Texture' : undeclared identifier
2.cpp(67) : error C2059: syntax error : ']'
2.cpp(67) : error C2143: syntax error : missing ';' before '{'
2.cpp(67) : error C2143: syntax error : missing ';' before '}'
2.cpp(79) : error C2109: subscript requires array or pointer type
2.cpp(221) : fatal error C1004: unexpected end of file found

А ещё не понятно, откуда взялся файл NeHeGL.h ?
Я этот готовый файл взял и использовал в моём примере.

Спасибо большое всем, кто читает, очень надеюсь в вашей помощи !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 янв 2008 04:23 
Не в сети
Новичок

Зарегистрирован: 09 янв 2008 23:14
Сообщения: 4
Сама программа : http://pmg.org.ru/nehe/nehe38.htm
Или вот :


#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#include "NeHeGL.h"
#include "resource.h"
#pragma comment( lib, "opengl32.lib" )
#pragma comment( lib, "glu32.lib" )
#pragma comment( lib, "glaux.lib" )

#ifndef CDS_FULLSCREEN
#define CDS_FULLSCREEN 4
#endif

GL_Window* g_window;
Keys* g_keys;


// Пользовательские переменные
GLuint texture[3]; // Место для хранения 3 текстур

struct object // Структура объекта
{
int tex; // Текстура
float x; // X позиция
float y; // Y позиция
float z; // Z позиция
float yi; // Y скорость падения
float spinz; // Z вращение
float spinzi; // Z скорость вращения
float flap; // Хлопающие треугольники :)
float fi; // Направление хлопанья
};

object obj[50]; // Создается 50 объектов




void SetObject(int loop) // Инициализация объекта (случайная)

{
obj[loop].tex=rand()%3; // Текстура
obj[loop].x=rand()%34-17.0f; // x от -17.0f до 17.0f
obj[loop].y=18.0f; // Y равно 18 (чуть выше экрана)
obj[loop].z=-((rand()%30000/1000.0f)+10.0f);// z от -10.0f до -40.0f
obj[loop].spinzi=(rand()%10000)/5000.0f-1.0f;// spinzi от -1.0f до 1.0f
obj[loop].flap=0.0f; // вначале хлопанье равно 0.0f;
obj[loop].fi=0.05f+(rand()%100)/1000.0f; // fi от 0.05f до 0.15f
obj[loop].yi=0.001f+(rand()%1000)/10000.0f; // yi от 0.001f до 0.101f
}




void LoadGLTextures() // Создание текстур из изображений, которые в ресурсе

{
HBITMAP hBMP; // Указатель на изображение
BITMAP BMP; // структура изображения
// Три ID для изображений, которые мы хотим загрузить из файла ресурсов
byte Texture[]={ IDB_BUTTERFLY1, IDB_BUTTERFLY2, IDB_BUTTERFLY3 };




glGenTextures(sizeof(Texture), &texture[0]); // создаем 3 текстуры (sizeof(Texture)=3 ID's)
for (int loop=0; loop<sizeof(Texture); loop++) // цикл по всем ID (изображений)
{



hBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(Texture[loop]), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);




if (hBMP) // существует ли изображение?
{ // если да …
GetObject(hBMP,sizeof(BMP), &BMP); // получить объект
// hBMP: указатель на графический объект
// sizeof(BMP): размер буфера для информации по объекту
// BMP - Буфер информации по объекту
// режим сохранения пикселей (равнение по двойному слову / 4 Bytes)
glPixelStorei(GL_UNPACK_ALIGNMENT,4);
glBindTexture(GL_TEXTURE_2D, texture[loop]); // связываемся с нашей текстурой
// линейная фильтрация
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
// линейная фильтрация Mipmap
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
// генерация Mipmapped текстуры (3 байта, ширина, высота и данные из BMP)
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, BMP.bmWidth, BMP.bmHeight,
GL_BGR_EXT, GL_UNSIGNED_BYTE, BMP.bmBits);
DeleteObject(hBMP); // удаление объекта изображения
}
}
}



// весь код для инициализации GL и все инициализации пользователя происходят здесь

BOOL Initialize (GL_Window* window, Keys* keys)

{

g_window = window;
g_keys = keys;
// Start Of User Initialization
LoadGLTextures(); // Загрузка текстуры из нашего файла ресурсов
glClearColor (0.0f, 0.0f, 0.0f, 0.5f); // цвет фона - черный
glClearDepth (1.0f); // Параметры буфера глубины
glDepthFunc (GL_LEQUAL); // Тип проверки глубины (меньше или равно)
glDisable(GL_DEPTH_TEST); // Выключить проверку глубины
glShadeModel (GL_SMOOTH); // выберем плавное сглаживание
glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // установим вычисление перспективы в режим наибольшей точности
glEnable(GL_TEXTURE_2D); // включим отрисовку текстуры
glBlendFunc(GL_ONE,GL_SRC_ALPHA); // зададим режим смешения (простой и быстрый)
glEnable(GL_BLEND); // включим смешение





for (int loop=0; loop<50; loop++) // цикл для инициализации 50 объектов
{
SetObject(loop); // вызов SetObject для задания новых случайных значений
}
return TRUE; // возврат TRUE (успешная инициализация)
}
void Deinitialize (void) // все деинициализации пользователя находятся здесь
{
}
void Update (DWORD milliseconds) // здесь происходит перерасчет движения
{
if (g_keys->keyDown [VK_ESCAPE] == TRUE) // была ли нажата клавиша ESC?
{
TerminateApplication (g_window); // остановить программу
}
if (g_keys->keyDown [VK_F1] == TRUE) // была ли нажата клавиша F1?
{
ToggleFullscreen (g_window); // переключить или на полный экран и на первоначальный
}
}



void Draw (void) // отрисовка сцены
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // очистка экрана и буфера глубины
for (int loop=0; loop<50; loop++) // цикл по 50 (рисуем 50 обьектов)
{




glLoadIdentity (); // сброс матрицы просмотра объекта
glBindTexture(GL_TEXTURE_2D, texture[obj[loop].tex]); // связывание с нашей текстурой glTranslatef(obj[loop].x,obj[loop].y,obj[loop].z); // помещение объекта glRotatef(45.0f,1.0f,0.0f,0.0f); // вращение по оси X
glRotatef((obj[loop].spinz),0.0f,0.0f,1.0f); // вращение по оси Z




glBegin(GL_TRIANGLES); // начала рисования треугольников
// первый треугольник
glTexCoord2f(1.0f,1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); // точка 1 (верхняя правая)
glTexCoord2f(0.0f,1.0f); glVertex3f(-1.0f, 1.0f, obj[loop].flap); // точка 2 (верхняя левая)
glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); // точка 3 (нижняя левая)






// второй треугольник
glTexCoord2f(1.0f,1.0f); glVertex3f( 1.0f, 1.0f, 0.0f); // точка 1 (вверху справа)
glTexCoord2f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); // точка 2 (внизу слева)
glTexCoord2f(1.0f,0.0f); glVertex3f( 1.0f,-1.0f, obj[loop].flap); // точка 3 (внизу справа)
glEnd();





obj[loop].y-=obj[loop].yi; // двигаем объект вниз по экрану
obj[loop].spinz+=obj[loop].spinzi; // увеличиваем вращение по Z на величину spinzi
obj[loop].flap+=obj[loop].fi; // увеличиваем значение хлопанья на fi




if (obj[loop].y<-18.0f) // объект вне экрана?
{
SetObject(loop); // если да – перезадай новые параметры





if ((obj[loop].flap>1.0f) || (obj[loop].flap<-1.0f)) // изменяем направление хлопанья?
{
obj[loop].fi=-obj[loop].fi; // сменим направление fi = -fi
}
}
Sleep(15); // короткая задержка (15 Milliseconds)
glFlush (); // сброс линии отрисовки GL
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 янв 2008 09:56 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
>2.cpp(220) : fatal error C1010: unexpected end of file while looking for precompiled header directive

Это пишет компилятор обычно в том случае, когда есть #ifdef, а #endif нет. Такое бывает и из-за того что головные файлы расположены не в правильном порядке. А так как в принципе на каждом компе они могут несколько отличаться (например, могут вноситься модификации), то и возникают эти проблемы.

В любом случае, надо иметь проект, чтобы что-то понять.

> А ещё не понятно, откуда взялся файл NeHeGL.h

Надо взять с сайта NeHe.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 янв 2008 12:27 
Не в сети
Новичок

Зарегистрирован: 09 янв 2008 23:14
Сообщения: 4
спасибо за ответ !

>>В любом случае, надо иметь проект, чтобы что-то понять.
Это что значит ?)

В этом коде можно что-нибудь поменять, чтобы оно заработало ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 янв 2008 22:46 
Не в сети
Новичок

Зарегистрирован: 09 янв 2008 23:14
Сообщения: 4
удалите )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 янв 2008 23:01 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Что удалите?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB