- 我用
glium
制作了旋转立方体,但是只有一个面是彩色的。我用 * Gouraud着色 *(来自glium
教程)来照明。**立方体是由定义的24个顶点和6个法线制作的。
- 我用
旋转由两个矩阵完成:
let m = [
[1.0, 0.0, 0.0, 0.0],
[0.0, t.cos(), -t.sin(), 0.0],
[0.0, t.sin(), t.cos(), 0.0],
[0.0, 0.0, 0.0, 1.0f32]
];
let n = [
[t.cos(), 0.0, t.sin(), 0.0],
[0.0, 1.0, 0.0, 0.0],
[-t.sin(), 0.0, t.cos(), 0.0],
[0.0, 0.0, 0.0, 1.0f32]
];
片段着色器(glsl):
#version 150
in vec3 v_normal;
out vec4 color;
uniform vec3 u_light;
void main() {
float brightness = dot(normalize(v_normal), normalize(u_light));
vec3 dark_color = vec3(0.6, 0.0, 0.0);
vec3 regular_color = vec3(1.0, 0.0, 0.0);
color = vec4(mix(dark_color, regular_color, brightness), 1.0);
}
灯光:
let light = [-1.0, 0.4, 0.9f32];
光线应该在某个旋转点照射到立方体的另一个面上,我试着改变光线的方向,什么也改变不了,有人知道吗?
有关多维数据集的更多信息,请参见:my previous q.(某些信息,如旋转,在此并不实际)
立方体的图像:第一节第一节第一节第一节第一次
1条答案
按热度按时间bzzcjhmw1#
我认为你在眼睛空间中有法线方向,在世界空间中有光线方向。所以你必须在进入着色器之前将光线方向转换到相机(眼睛)空间中,类似于(伪代码):
另外,对于亮度,我认为你不希望有负值,所以它必须是一种形式
我建议阅读关于照明的介绍文章,例如在learnOpenGL -https://learnopengl.com/Lighting/Basic-Lighting上,你可以看到关于什么方向以及如何准备它们的描述。或者一些关于在相机空间中拥有灯光方向的GLSL教程-https://www.lighthouse3d.com/tutorials/glsl-tutorial/directional-lights/