2013-12-10 2 views
0

Я использую (Python и PyOpenGL) с чередованием VBO (вершину, нормальный, цвет) в виде:glColorPointer() не картина цвета вершины чередования VBO

Vx1, Vy1, Vz1, Nx1, Ny1, Nz1, R1, G1, B1, A1, Vx2... 

ВБО генерируется с:

self.vbo_id = glGenBuffers (1) 
glBindBuffer(GL_ARRAY_BUFFER, self.vbo_id) 

# upload data to VBO 
data = model_loader.Model_loader(filename = "geometry.STL") 
self.N_vertices = len(vertices) 

alpha = 1 
color = np.array([[0.1, 0.1, 0.1, alpha]], dtype='float32') 
colors = np.repeat(color, self.N_vertices, axis=0) 

VBO_data = VBO_reshape.create_VBO_array(data.vertices, data.normals, colors, GL_primitive_type = "triangle", interleaved_type = "true") 
VBO_size_bytes = arrays.ArrayDatatype.arrayByteCount(VBO_data) 

glBufferData(GL_ARRAY_BUFFER, VBO_size_bytes, VBO_data, GL_STATIC_DRAW) 
glBindBuffer(GL_ARRAY_BUFFER, self.vbo_id) 

Геометрия из VBO обращается с кодом:

v_pointer = ctypes.c_void_p(0) 
n_pointer = ctypes.c_void_p(12) 
c_pointer = ctypes.c_void_p(24) 

v_stride = 40 
n_stride = 40 
c_stride = 40 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.vbo_id) 
# enable vertex array 
glEnableClientState(GL_VERTEX_ARRAY) 
glVertexPointer(3, GL_FLOAT, v_stride, v_pointer) 

# enable normal array 
glEnableClientState(GL_NORMAL_ARRAY) 
glNormalPointer(GL_FLOAT, n_stride, n_pointer) 

# enable color array 
glEnableClientState(GL_COLOR_ARRAY) 
glColorPointer(4, GL_FLOAT, c_stride, c_pointer) 

glDrawArrays(GL_TRIANGLES, 0, self.N_vertices) 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) # reset 

glDisableClientState(GL_COLOR_ARRAY) 
glDisableClientState(GL_NORMAL_ARRAY) 
glDisableClientState(GL_VERTEX_ARRAY) 

Геометрия (вершин и нормалей) нарисованы правильно (см. рисунок ниже). Я хочу рисовать каждую вершину разного цвета, но не окрашивать какие-либо цвета? Любые предложения о том, как нарисовать цвет вершин с GL_TRIANGLES и звоните по телефонам gl_DrawArrays() и glColorPointer? Нужно ли использовать шейдеры или это можно сделать без шейдеров? Если я правильно понимаю, это можно сделать без использования шейдеров. enter image description here

ответ

0

Проблема решена. Решение заключалось в отключении освещения и освещения. Но есть новый. Если я отключу освещение и освещение, модель будет окрашена в однородный цвет, похоже, что эти нормали не используются при рисовании.

  • Левого куб: цвета вершин и освещение (огни) инвалиды
  • центр куб: цвета вершин не показаны, потому что освещение (а) огни включены
  • Правого куба: равномерный цвет вершин и освещения (и огни) инвалидов

enter image description here

Я хотел бы обратить центр куба, но с (равномерном) цвет как правый куб. Я хотел бы спросить вас, как это можно достичь? Я использую чередующиеся VBO. Спасибо за предложения, так как сейчас я без них :)

+0

Stack Overflow не форум, и то, что вы разместили, не является прямым ответом, потому что вы задаете новый вопрос в ответе. Ответ должен быть ОТВЕТ, не более, не меньше. – Vallentin

+1

Предлагаю вам ознакомиться с [SO community guidelines] (http://stackoverflow.com/help). В любом случае массивы на стороне клиента, встроенные атрибуты массива и затенение с фиксированной функцией все устарели, а FYI, единственный куб выше с однородным цветом - тот, который справа. Различные оттенки одного и того же оттенка не одного цвета. Я подозреваю, что вы ищете, но это 'GL_COLOR_MATERIAL'. – bcrist

Смежные вопросы