Помогите c OpeGL и FASM

Тема в разделе "WASM.OpenGL", создана пользователем wcools, 15 окт 2008.

  1. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Только начал изучать OGL, сделал треугольник и полигон.
    Как создавать обьемные фигуры??? Читал, сто для создания куба надо надо нарисовать 6 квадратов, и видел функцию glutWireCube, которая у меня не работае, программа компилируется и все, ничего не выводит. Может у кого примеры есть попроще.
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    http://vertexland.narod.ru/data/opengl_fasm.htm
     
  3. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Хорошая сылка, но мнебы статью для чайников, как это все делается.
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    http://vertexland.narod.ru/code/opengl/nehe_comment.htm
    http://pmg.org.ru/nehe/index.html
     
  5. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Хотел сделать 3д треугольник, такое ощущение, что некоторые его стороны прозрачны. И функция glTranslatef не работает: если поставить z больше 1 или меньше -1, обьект вообще не видно.
    Вот исходник http://www.wcools.narod.ru/1.rar
     
  6. drone

    drone New Member

    Публикаций:
    0
    Регистрация:
    14 июл 2004
    Сообщения:
    37
    Адрес:
    Moscow
    От nehe - лучшее для новичков.
    А так http://gamedev.ru/
     
  7. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Немогу разобраться как наложить текстуру (без GLU, GLUAX...), есть пример на асме, но без коментариев, может кто нормальным примером поделится.
     
  8. NaZGuL

    NaZGuL New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    41
    Адрес:
    Russia
    wcools
    А ты пробовал почитать на сайте статью http://wasm.ru/article.php?article=OpenGLbyTylerDurden ?
    Там есть глава про текстурирование.
    Вот самый простой пример:
    Код (Text):
    1.    ...
    2.    ;включаем работу с текстурами
    3.    invoke  glEnable, GL_TEXTURE_2D
    4.    ....
    5.     ;генерируем номер для нашей текстуры
    6.     invoke  glGenTextures, 1, texture
    7.     ;выбираем её
    8.     invoke  glBindTexture, GL_TEXTURE_2D, [texture]
    9.     ;загружаем данные в видеокурту
    10.     invoke  glTexImage2D, GL_TEXTURE_2D, 0, 3, [ImgInfo.bmWidth], [ImgInfo.bmHeight], 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, [ImgInfo.bmBits]
    11.     ;устанавливаем параметры фильтрации
    12.     invoke  glTexParameteri, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR
    13.     invoke  glTexParameteri, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR
    14.  
    15.    ;главный цикл (отрисовка)
    16.    ...
    17.    ; опять выберем текстуру заново
    18.    invoke glBindTexture, GL_TEXTURE_2D, [texture]
    19.  
    20.     ; будем рисовать четырёхугольники
    21.     invoke glBegin, GL_QUADS
    22.   ;front
    23.     ;текстурная координата
    24.     invoke  glTexCoord2f, 0.0f,0.0f
    25.     ;координата точки
    26.     invoke  glVertex3f, -1.0f,-1.0f, 1.0f
    27.     invoke  glTexCoord2f, 1.0f,0.0f
    28.     invoke  glVertex3f,  1.0f,-1.0f, 1.0f
    29.     invoke  glTexCoord2f, 1.0f,1.0f
    30.     invoke  glVertex3f,  1.0f, 1.0f, 1.0f
    31.     invoke  glTexCoord2f, 0.0f,1.0f
    32.     invoke  glVertex3f, -1.0f, 1.0f, 1.0f
    33.   ;back
    34.     invoke  glTexCoord2f, 1.0f,0.0f
    35.     invoke  glVertex3f, -1.0f,-1.0f,-1.0f
    36.     invoke  glTexCoord2f, 1.0f,1.0f
    37.     invoke  glVertex3f, -1.0f, 1.0f,-1.0f
    38.     invoke  glTexCoord2f, 0.0f,1.0f
    39.     invoke  glVertex3f,  1.0f, 1.0f,-1.0f
    40.     invoke  glTexCoord2f, 0.0f,0.0f
    41.     invoke  glVertex3f,  1.0f,-1.0f,-1.0f
    42.   ;top
    43.     invoke  glTexCoord2f, 0.0f,1.0f
    44.     invoke  glVertex3f, -1.0f, 1.0f,-1.0f
    45.     invoke  glTexCoord2f, 0.0f,0.0f
    46.     invoke  glVertex3f, -1.0f, 1.0f, 1.0f
    47.     invoke  glTexCoord2f, 1.0f,0.0f
    48.     invoke  glVertex3f,  1.0f, 1.0f, 1.0f
    49.     invoke  glTexCoord2f, 1.0f,1.0f
    50.     invoke  glVertex3f,  1.0f, 1.0f,-1.0f
    51.   ;bottom
    52.     invoke  glTexCoord2f, 1.0f,1.0f
    53.     invoke  glVertex3f, -1.0f,-1.0f,-1.0f
    54.     invoke  glTexCoord2f, 0.0f,1.0f
    55.     invoke  glVertex3f,  1.0f,-1.0f,-1.0f
    56.     invoke  glTexCoord2f, 0.0f,0.0f
    57.     invoke  glVertex3f,  1.0f,-1.0f, 1.0f
    58.     invoke  glTexCoord2f, 1.0f,0.0f
    59.     invoke  glVertex3f, -1.0f,-1.0f, 1.0f
    60.   ;right
    61.     invoke  glTexCoord2f, 1.0f,0.0f
    62.     invoke  glVertex3f, 1.0f,-1.0f,-1.0f
    63.     invoke  glTexCoord2f, 1.0f,1.0f
    64.     invoke  glVertex3f,  1.0f, 1.0f,-1.0f
    65.     invoke  glTexCoord2f, 0.0f,1.0f
    66.     invoke  glVertex3f,  1.0f, 1.0f, 1.0f
    67.     invoke  glTexCoord2f, 0.0f,0.0f
    68.     invoke  glVertex3f,  1.0f,-1.0f, 1.0f
    69.   ;left
    70.     invoke  glTexCoord2f, 0.0f,0.0f
    71.     invoke  glVertex3f, -1.0f,-1.0f,-1.0f
    72.     invoke  glTexCoord2f, 1.0f,0.0f
    73.     invoke  glVertex3f, -1.0f,-1.0f, 1.0f
    74.     invoke  glTexCoord2f, 1.0f,1.0f
    75.     invoke  glVertex3f, -1.0f, 1.0f, 1.0f
    76.     invoke  glTexCoord2f, 0.0f,1.0f
    77.     invoke  glVertex3f, -1.0f, 1.0f,-1.0f
    78.     ; заканчиваем рисовать
    79.     invoke  glEnd
     
  9. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Сделал наложение текстуры, но есть много вопросов:
    Вот загрузка текстуры

    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
     
  10. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Зачем нужно включение перспективного преобразования, что такое glcall gluPerspective, и как без этого обойтись. Я так понял, что glTranslatef из-за этого не работает.
     
  11. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Как заставить раюотать работать 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

    что здесь не робит???
     
  12. wcools

    wcools New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2008
    Сообщения:
    89
    Разобрался наконецто :)
    Новый исходник тамже, если кому надо
    Прo glcall расскажите пожалуйста подробно, а то не особо понятно его назначение.
     
  13. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    В glFrustum нужно передавать 8-байтовые float`ы. Видимо этим и отличается glcall от invoke.
     
  14. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Если имеются ввиду эти макросы:
    Код (Text):
    1. macro glpushv GLfloatVar
    2. {
    3.     push dword [GLfloatVar+4]
    4.     push dword [GLfloatVar]
    5. }
    6.  
    7. macro glpush GLfloatVar
    8. {
    9.     name = GLfloatVar
    10.     virtual at 0
    11.     dq GLfloatVar
    12.     load name#.l dword from 0
    13.     load name#.h dword from 4
    14.     end virtual
    15.     push dword name.h
    16.     push dword name.l
    17. }
    18.  
    19. macro glcall procedure,[arg]
    20. {
    21.     reverse
    22.     if arg eqtype 1.0f
    23.     glpush arg
    24.     else
    25.     addr=arg
    26.     glpushv addr
    27.     end if
    28.     common
    29.     call [procedure]
    30. }
    то, как и сказал murder они нужны для того, чтобы бепроблемно передавать в функцию аргумент размером в 8 байт (double). Так как у некоторых функций OpenGL встречаются такие, которые требуют часть аргументов формата double.