मैं ओपनजीएल और जीएलएसएल के लिए नया हूं, और इसे http://open.gl/ के माध्यम से सीख रहा हूं।मैं उन सभी के बजाय एक वर्टेक्स का रंग कैसे बदलूं?
मैं एक त्रिकोण आकर्षित और उपयोग करने वाले सभी vertexes का रंग बदलने में कामयाब रहे है:
glUniform3f(uniColor, red, 0.0, 0.0)
के "लाल" मूल्य कहाँ लगातार बदल रहा है, लेकिन यह सब vertexes का रंग मूल्य अद्यतन करता है त्रिकोण में, जबकि मैं केवल एक या दो कशेरुक बदलना चाहता हूं।
कोड पर देख रहे हैं मैं नहीं दिख रहा है जहां मैं किसी भी तर्क लागू कर सकते हैं (कोड लगभग पूरी तरह से http://open.gl/content/code/c2_triangle_uniform.txt पर आधारित है) उन सब के बजाय एक शीर्ष
इस कोड तथापि में पर ध्यान केंद्रित करने: http://open.gl/content/code/c2_color_triangle.txt, प्रत्येक वर्टेक्स को अपना रंग मिलता है, लेकिन ऐसा लगता है कि यह कठिन कोडित है, मैं प्रोग्राम की प्रगति के रूप में रंगों को गतिशील रूप से बदल नहीं सकता।
मैं
uniColor = glGetUniformLocation(shader.handle, "triangleColor")
अनुमान लगा रहा हूँ मुझे एक चर के स्थान मैं बदल सकते हैं देता है और इस चर सभी vertexes के रंग अद्यतन करने के लिए प्रयोग किया जाता है, और कहा कि शायद मैं क्या करने की जरूरत 3 बनाने है चर, प्रत्येक चरम के लिए एक और फिर उन तक पहुंच, लेकिन मैं यह कैसे करूँ?
यदि मैं जीएलएसएल देखता हूं तो मेरे पास "वर्दी वीसी 3 त्रिकोण रंग" होता है; जो तब
void main()
{
outColor = vec4(triangleColor, 1.0);
}
में प्रयोग किया जाता है, लेकिन यहां तक कि अगर मैं 3 तरह के triangleColor चर बनाने मैं कैसे बता होगा शून्य मुख्य() जो शिखर हो जाता है क्या चर भेद करने के लिए?
कोड:
import pyglet
from pyglet.gl import *
from shader import Shader
from ctypes import pointer, sizeof
import math
import time
window = pyglet.window.Window(800, 600, "OpenGL")
window.set_location(100, 100)
# Vertex Input
## Vertex Array Objects
vao = GLuint()
glGenVertexArrays(1, pointer(vao))
glBindVertexArray(vao)
## Vertex Buffer Object
vbo = GLuint()
glGenBuffers(1, pointer(vbo)) # Generate 1 buffer
vertices = [0.0, 0.5,
0.5, -0.5,
-0.5, -0.5]
## Convert the verteces array to a GLfloat array, usable by glBufferData
vertices_gl = (GLfloat * len(vertices))(*vertices)
## Upload data to GPU
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices_gl), vertices_gl, GL_STATIC_DRAW)
# Shaders (Vertex and Fragment shaders)
vertex = """
#version 150
in vec2 position;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}
"""
fragment = """
#version 150
uniform vec3 triangleColor;
out vec4 outColor;
void main()
{
outColor = vec4(triangleColor, 1.0);
}
"""
## Compiling shaders and combining them into a program
shader = Shader(vertex, fragment)
shader.bind() #glUseProgram
# Making the link between vertex data and attributes
## shader.handle holds the value of glCreateProgram()
posAttrib = glGetAttribLocation(shader.handle, "position")
glEnableVertexAttribArray(posAttrib)
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0)
uniColor = glGetUniformLocation(shader.handle, "triangleColor")
# Set clear color
glClearColor(0.0, 0.0, 0.0, 1.0)
@window.event
def on_draw():
# Set the color of the triangle
red = (math.sin(time.clock() * 4.0) + 1.0)/2.0
glUniform3f(uniColor, red, 0.0, 0.0)
# Clear the screen to black
glClear(GL_COLOR_BUFFER_BIT)
# Draw a triangle from the 3 vertices
glDrawArrays(GL_TRIANGLES, 0, 3)
@window.event
def on_key_press(symbol, modifiers):
pass
@window.event
def on_key_release(symbol, modifiers):
pass
def update(dt):
pass
pyglet.clock.schedule(update)
pyglet.app.run()
रंगों वाला दूसरा बफर बनाते हैं, यह आपकी स्थिति की तरह होना चाहिए, लेकिन इसे कशेरुक शेडर में उपयोग करने के बजाय, आप उन्हें टुकड़े टुकड़े –