from OpenGL.GL import * from OpenGL.GLUT import *
from random import random
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(300, 300)
glutInitWindowPosition(50, 50)
glutInit(sys.argv)
glutCreateWindow(b"Shaders!")
glutDisplayFunc(draw)
glutIdleFunc(draw)
glutSpecialFunc(specialkeys)
glClearColor(0.2, 0.2, 0.2, 1)
# ( , ) def create_shader(shader_type, source): # shader = glCreateShader(shader_type) # glShaderSource(shader, source) # glCompileShader(shader) # return shader
# # - vertex = create_shader(GL_VERTEX_SHADER, """ varying vec4 vertex_color; void main(){ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vertex_color = gl_Color; }""")
# "" fragment = create_shader(GL_FRAGMENT_SHADER, """ varying vec4 vertex_color; void main() { gl_FragColor = vertex_color; }""")
program = glCreateProgram()
glAttachShader(program, vertex) glAttachShader(program, fragment)
glLinkProgram(program)
glUseProgram(program)
pointdata = [[0, 0.5, 0], [-0.5, -0.5, 0], [0.5, -0.5, 0]]
pointcolor = [[1, 1, 0], [0, 1, 1], [1, 0, 1]]
glutMainLoop()
# def specialkeys(key, x, y): # pointcolor global pointcolor # if key == GLUT_KEY_UP: # glRotatef(5, 1, 0, 0) # 5 X if key == GLUT_KEY_DOWN: # glRotatef(-5, 1, 0, 0) # -5 X if key == GLUT_KEY_LEFT: # glRotatef(5, 0, 1, 0) # 5 Y if key == GLUT_KEY_RIGHT: # glRotatef(-5, 0, 1, 0) # -5 Y if key == GLUT_KEY_END: # END # pointcolor 0-1 pointcolor = [[random(), random(), random()], [random(), random(), random()], [random(), random(), random()]]
glClear(GL_COLOR_BUFFER_BIT)
glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_COLOR_ARRAY)
glVertexPointer(3, GL_FLOAT, 0, pointdata)
glColorPointer(3, GL_FLOAT, 0, pointcolor)
glDrawArrays(GL_TRIANGLES, 0, 3)
glDisableClientState(GL_VERTEX_ARRAY) glDisableClientState(GL_COLOR_ARRAY) glutSwapBuffers()
# -*- coding: utf-8 -*- # : from OpenGL.GL import * from OpenGL.GLUT import * #import sys # random random from random import random # pointcolor ( ) global pointcolor # def specialkeys(key, x, y): # pointcolor global pointcolor # if key == GLUT_KEY_UP: # glRotatef(5, 1, 0, 0) # 5 X if key == GLUT_KEY_DOWN: # glRotatef(-5, 1, 0, 0) # -5 X if key == GLUT_KEY_LEFT: # glRotatef(5, 0, 1, 0) # 5 Y if key == GLUT_KEY_RIGHT: # glRotatef(-5, 0, 1, 0) # -5 Y if key == GLUT_KEY_END: # END # pointcolor 0-1 pointcolor = [[random(), random(), random()], [random(), random(), random()], [random(), random(), random()]] # ( , ) def create_shader(shader_type, source): # shader = glCreateShader(shader_type) # glShaderSource(shader, source) # glCompileShader(shader) # return shader # def draw(): glClear(GL_COLOR_BUFFER_BIT) # glEnableClientState(GL_VERTEX_ARRAY) # glEnableClientState(GL_COLOR_ARRAY) # # , : # - # - # - # , 0 # - glVertexPointer(3, GL_FLOAT, 0, pointdata) # , : # , glColorPointer(3, GL_FLOAT, 0, pointcolor) # : # - (, , .) # - # - ( 3 - 9 ) glDrawArrays(GL_TRIANGLES, 0, 3) glDisableClientState(GL_VERTEX_ARRAY) # glDisableClientState(GL_COLOR_ARRAY) # glutSwapBuffers() # # # RGB ( ) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) # (, ) glutInitWindowSize(300, 300) # # glutInitWindowPosition(50, 50) # OpenGl glutInit(sys.argv) # "Shaders!" glutCreateWindow(b"Shaders!") # , glutDisplayFunc(draw) # , "" glutIdleFunc(draw) # , glutSpecialFunc(specialkeys) # glClearColor(0.2, 0.2, 0.2, 1) # : # # - vertex = create_shader(GL_VERTEX_SHADER, """ varying vec4 vertex_color; void main(){ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vertex_color = gl_Color; }""") # : # "" fragment = create_shader(GL_FRAGMENT_SHADER, """ varying vec4 vertex_color; void main() { gl_FragColor = vertex_color; }""") # program = glCreateProgram() # c glAttachShader(program, vertex) # glAttachShader(program, fragment) # "" glLinkProgram(program) # OpenGL glUseProgram(program) # ( ) pointdata = [[0, 0.5, 0], [-0.5, -0.5, 0], [0.5, -0.5, 0]] # ( ) pointcolor = [[1, 1, 0], [0, 1, 1], [1, 0, 1]] # glutMainLoop()
Source: https://habr.com/ru/post/247123/
All Articles