Ruby OpenGL: как загрузить растровые текстуры и поместить их в 3D-объекты? - PullRequest
0 голосов
/ 25 апреля 2011

Я только начал программировать с Ruby-OpenGL.Я перевел учебник Nehe в класс Renderer, и он отлично работает, показывая некоторые простые 3D-объекты.Теперь я хочу наложить несколько текстур на эти объекты.У меня есть «texture.bmp», но как разместить его над моими объектами?Это мой класс рендерера:

module RGLEngine
    require "rubygems"
    require "gl"
    require "glu"
    require "glut"
    require "mathn"
    require "yaml"

    class Renderer
        include Gl
        include Glu
        include Glut

        attr_reader :width, :height

        def initialize
            @width = 640 # to be loaded from config.yaml
            @height = 480
        end
        def render
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
            glMatrixMode(GL_MODELVIEW)
            glLoadIdentity
            glTranslatef(-1.5, 0.0, -6.0)
            # Draw Poylgons
            # ...
      # uncomment this for a simple example
            #glBegin(GL_POLYGON)
            #   glVertex3f( 0.0,  1.0, 0.0)
            #   glVertex3f( 1.0, -1.0, 0.0)
            #   glVertex3f(-1.0, -1.0, 0.0)
            #glEnd
            glutSwapBuffers
        end
        def idle
            glutPostRedisplay
        end
        def reshape(width, height)
            if height == 0
                height = 1
            end
            glViewport(0, 0, width, height)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity
            gluPerspective(45.0, width / height, 0.1, 100.0)
        end
        def realize!
            glutInit
            glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
            glutInitWindowSize(@width, @height)
            glutInitWindowPosition(0, 0)
            window = glutCreateWindow("RGLEngine alpha")
            glutDisplayFunc(method(:render).to_proc)
            glutReshapeFunc(method(:reshape).to_proc)
            glutIdleFunc(method(:idle).to_proc)
            glClearColor(0.0, 0.0, 0.0, 0)
            glClearDepth(1.0)
            glDepthFunc(GL_LEQUAL)
            glEnable(GL_DEPTH_TEST)
            glEnable(GL_TEXTURE_2D)
            glShadeModel(GL_SMOOTH)
            glMatrixMode(GL_PROJECTION)
            glLoadIdentity
            gluPerspective(45.0, @width / @height, 0.1, 100.0)
            glMatrixMode(GL_MODELVIEW)
            glutMainLoop()
        end
    end
end

RGLEngine::Renderer.new.realize!

1 Ответ

1 голос
/ 25 апреля 2011

OpenGL ничего не знает о форматах файлов, поэтому вам понадобится что-то для загрузки вашего bmp в память, прежде чем вы сможете вызвать glTexImage2D.

Редактировать: вот некоторые ресурсы: текстуры и, возможно, загрузка изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...