Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2016, 10:26   #1
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию OGL - рекурсивный рендеринг текстур

Язык PureBasic, но в принципе можно на любом, который поддерживает разработку на OGL
ByKQXXA.png

Код:
Procedure Cube()

glBegin_(#GL_QUADS)

glTexCoord2i_(0, 0) : glVertex3f_(-1, -1, -1)
glTexCoord2i_(0, 1) : glVertex3f_(-1, -1, 1)
glTexCoord2i_(1, 1) : glVertex3f_(-1, 1, 1)
glTexCoord2i_(1, 0) : glVertex3f_(-1, 1, -1)

glTexCoord2i_(0, 0) : glVertex3f_( 1, -1, -1)
glTexCoord2i_(0, 1) : glVertex3f_( 1, -1, 1)
glTexCoord2i_(1, 1) : glVertex3f_( 1, 1, 1)
glTexCoord2i_(1, 0) : glVertex3f_( 1, 1, -1)

glTexCoord2i_(0, 0) : glVertex3f_(-1, -1, -1)
glTexCoord2i_(0, 1) : glVertex3f_(-1, -1, 1)
glTexCoord2i_(1, 1) : glVertex3f_( 1, -1, 1)
glTexCoord2i_(1, 0) : glVertex3f_( 1, -1, -1)

glTexCoord2i_(0, 0) : glVertex3f_(-1, 1, -1)
glTexCoord2i_(0, 1) : glVertex3f_(-1, 1, 1)
glTexCoord2i_(1, 1) : glVertex3f_( 1, 1, 1)
glTexCoord2i_(1, 0) : glVertex3f_( 1, 1, -1)

glTexCoord2i_(0, 0) : glVertex3f_(-1, -1, -1)
glTexCoord2i_(0, 1) : glVertex3f_(-1, 1, -1)
glTexCoord2i_(1, 1) : glVertex3f_( 1, 1, -1)
glTexCoord2i_(1, 0) : glVertex3f_( 1, -1, -1)

glTexCoord2i_(0, 0) : glVertex3f_(-1, -1, 1)
glTexCoord2i_(0, 1) : glVertex3f_(-1, 1, 1)
glTexCoord2i_(1, 1) : glVertex3f_( 1, 1, 1)
glTexCoord2i_(1, 0) : glVertex3f_( 1, -1, 1)

glEnd_()
EndProcedure


UseJPEGImageDecoder()
UsePNGImageDecoder()

Define *Buffer
Define TextureID.I
Define window_width.l = 500
Define window_height.l = 500

#size = 256

;#ImagePath = #PB_Compiler_Home + "Examples/3D/Data/Textures/"
;LoadImage(0, #ImagePath+"Geebee2.bmp")
;LoadImage(0, #ImagePath+"Wood.jpg")
;*Buffer = EncodeImage(0)
*Buffer = AllocateMemory(3*256*256) ; static unsigned char texture[3 * SIZE * SIZE];

OpenWindow(0, 1, 1, window_width, window_height, "OGL - рекурсивный рендеринг текстур")
SetWindowColor(0, 0)
OpenGLGadget(0, 0, 0, window_height , window_height)


glEnable_(#GL_TEXTURE_2D) 
glEnable_(#GL_DEPTH_TEST)

; ----- Generate texture
glGenTextures_(1, @TextureID)
glBindTexture_(#GL_TEXTURE_2D, TextureID)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_S, #GL_CLAMP);
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_T, #GL_CLAMP);
glTexImage2D_(#GL_TEXTURE_2D, 0, 3, #size, #size, 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *Buffer);*Buffer+57)
FreeMemory(*Buffer)


Repeat

  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  glLoadIdentity_()                                     
  glTranslatef_(0.0, 0.0, -10)
  glRotatef_(30, 1, 0, 0)
 
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
glLoadIdentity_()
glTranslatef_(0, 0, -11)
;
ro.f+1
glRotatef_(ro, 1, 1, 1)

;'/* Define a view-port adapted to the texture */
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_()
gluPerspective_(20, 1, 5, 15)
glViewport_(0, 0, #size, #size)
glMatrixMode_(#GL_MODELVIEW)

;'/* Render to buffer */
glClearColor_(255, 175, 1, 0)
glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)

cube()

glFlush_()

glCopyTexSubImage2D_(#GL_TEXTURE_2D, 0, 5, 5, 0, 0, #size - 10, #size - 10)

;'/* Render to screen */
glMatrixMode_(#GL_PROJECTION)
glLoadIdentity_()
gluPerspective_(20, window_width / window_height, 5, 15)
glViewport_(0, 0, window_width, window_height)
glMatrixMode_(#GL_MODELVIEW)
glClearColor_(0, 0, 0, 0)

glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)

cube()
;SetGadgetAttribute(0,#PB_OpenGL_FlipBuffers, #True)

  SetGadgetAttribute(0, #PB_OpenGL_FlipBuffers, #True)

  If WaitWindowEvent(10) = #PB_Event_CloseWindow
    glDeleteTextures_(1, @TextureID)
    Break
  EndIf
ForEver
Готовое приложение ( exe)
recursiverender.zip
kvitaliy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедурный рендеринг WorldMaster Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 16.02.2015 08:08
Рендеринг AVI -> Полигон SoldierOfFortune Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 08.11.2012 19:25
бордюр текстуры (ogl) NiCola999 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 12.01.2011 21:40
Рендеринг изображения - создание отражения BOBAH13 Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 18.01.2009 16:27