Только начал изучать OGL, сделал треугольник и полигон. Как создавать обьемные фигуры??? Читал, сто для создания куба надо надо нарисовать 6 квадратов, и видел функцию glutWireCube, которая у меня не работае, программа компилируется и все, ничего не выводит. Может у кого примеры есть попроще.
Хотел сделать 3д треугольник, такое ощущение, что некоторые его стороны прозрачны. И функция glTranslatef не работает: если поставить z больше 1 или меньше -1, обьект вообще не видно. Вот исходник http://www.wcools.narod.ru/1.rar
Немогу разобраться как наложить текстуру (без GLU, GLUAX...), есть пример на асме, но без коментариев, может кто нормальным примером поделится.
wcools А ты пробовал почитать на сайте статью http://wasm.ru/article.php?article=OpenGLbyTylerDurden ? Там есть глава про текстурирование. Вот самый простой пример: Код (Text): ... ;включаем работу с текстурами invoke glEnable, GL_TEXTURE_2D .... ;генерируем номер для нашей текстуры invoke glGenTextures, 1, texture ;выбираем её invoke glBindTexture, GL_TEXTURE_2D, [texture] ;загружаем данные в видеокурту invoke glTexImage2D, GL_TEXTURE_2D, 0, 3, [ImgInfo.bmWidth], [ImgInfo.bmHeight], 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, [ImgInfo.bmBits] ;устанавливаем параметры фильтрации invoke glTexParameteri, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR invoke glTexParameteri, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ;главный цикл (отрисовка) ... ; опять выберем текстуру заново invoke glBindTexture, GL_TEXTURE_2D, [texture] ; будем рисовать четырёхугольники invoke glBegin, GL_QUADS ;front ;текстурная координата invoke glTexCoord2f, 0.0f,0.0f ;координата точки invoke glVertex3f, -1.0f,-1.0f, 1.0f invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, 1.0f,-1.0f, 1.0f invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, 1.0f, 1.0f, 1.0f invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, -1.0f, 1.0f, 1.0f ;back invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, -1.0f,-1.0f,-1.0f invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, -1.0f, 1.0f,-1.0f invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, 1.0f, 1.0f,-1.0f invoke glTexCoord2f, 0.0f,0.0f invoke glVertex3f, 1.0f,-1.0f,-1.0f ;top invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, -1.0f, 1.0f,-1.0f invoke glTexCoord2f, 0.0f,0.0f invoke glVertex3f, -1.0f, 1.0f, 1.0f invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, 1.0f, 1.0f, 1.0f invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, 1.0f, 1.0f,-1.0f ;bottom invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, -1.0f,-1.0f,-1.0f invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, 1.0f,-1.0f,-1.0f invoke glTexCoord2f, 0.0f,0.0f invoke glVertex3f, 1.0f,-1.0f, 1.0f invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, -1.0f,-1.0f, 1.0f ;right invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, 1.0f,-1.0f,-1.0f invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, 1.0f, 1.0f,-1.0f invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, 1.0f, 1.0f, 1.0f invoke glTexCoord2f, 0.0f,0.0f invoke glVertex3f, 1.0f,-1.0f, 1.0f ;left invoke glTexCoord2f, 0.0f,0.0f invoke glVertex3f, -1.0f,-1.0f,-1.0f invoke glTexCoord2f, 1.0f,0.0f invoke glVertex3f, -1.0f,-1.0f, 1.0f invoke glTexCoord2f, 1.0f,1.0f invoke glVertex3f, -1.0f, 1.0f, 1.0f invoke glTexCoord2f, 0.0f,1.0f invoke glVertex3f, -1.0f, 1.0f,-1.0f ; заканчиваем рисовать invoke glEnd
Сделал наложение текстуры, но есть много вопросов: Вот загрузка текстуры invoke glGenTextures,1,texture invoke LoadImage,[wcl.hInstance],101, IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION invoke GetObject,eax,sizeof.BITMAP,ImgInfo invoke glBindTexture,GL_TEXTURE_2D,[texture] invoke glTexImage2D,GL_TEXTURE_2D,0,3,256,256,0,GL_RGB,GL_UNSIGNED_BYTE,ImgInfo.bmBits invoke glTexParameteri,GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR invoke glTexParameteri,GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR ; invoke glEnable,GL_TEXTURE_2D Убирал отмеченные строки(и ImgInfo.bmBits менял на texture) и программа работала, ПОЧЕМУ??? Переменную texture я не заполнял, как тогда картинка вывелась на экран??? Откуда взялось sizeof.BITMAP??? PS: исходник http://www.wcools.narod.ru/FASM.rar
Зачем нужно включение перспективного преобразования, что такое glcall gluPerspective, и как без этого обойтись. Я так понял, что glTranslatef из-за этого не работает.
Как заставить раюотать работать glFrutstum ??? Все компилится, но толку никакого. invoke glMatrixMode,GL_PROJECTION invoke glLoadIdentity glcall glFrustum,-1.0f,1.0f,-1.0f,1.0f,2.0f,100.0f invoke glMatrixMode,GL_MODELVIEW что здесь не робит???
Разобрался наконецто Новый исходник тамже, если кому надо Прo glcall расскажите пожалуйста подробно, а то не особо понятно его назначение.
Если имеются ввиду эти макросы: Код (Text): macro glpushv GLfloatVar { push dword [GLfloatVar+4] push dword [GLfloatVar] } macro glpush GLfloatVar { name = GLfloatVar virtual at 0 dq GLfloatVar load name#.l dword from 0 load name#.h dword from 4 end virtual push dword name.h push dword name.l } macro glcall procedure,[arg] { reverse if arg eqtype 1.0f glpush arg else addr=arg glpushv addr end if common call [procedure] } то, как и сказал murder они нужны для того, чтобы бепроблемно передавать в функцию аргумент размером в 8 байт (double). Так как у некоторых функций OpenGL встречаются такие, которые требуют часть аргументов формата double.