我正在尝试制作一个光球(像太阳一样),但我似乎根本无法看到它。我会给你一些代码snipets。它在Java LWJGL中,所以它可能看起来有点不同。
private float lightAmbient[] = { 0.0f, 1.0f, 1.0f, 1.0f }; // Ambient Light Values ( NEW )
private float lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; // Diffuse Light Values ( NEW )
private float lightPosition[] = { 0.0f, 0.0f, -5.0f, 1.0f }; // Light Position ( NEW )
float lightSpecular[] = { 0f, 0f, 0.5f, 1.0f }; // highlight
和
ByteBuffer temp = ByteBuffer.allocateDirect(16);
temp.order(ByteOrder.nativeOrder());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip()); // Setup The Ambient Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip()); // Setup The Diffuse Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip()); // Position The Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR,(FloatBuffer)temp.asFloatBuffer().put(lightSpecular).flip()); // Position The Light
GL11.glEnable(GL11.GL_LIGHT1);
我还需要做些什么来使灯光可见?
答案 0 :(得分:7)
灯光永远不可见。
但是,它们对其他对象的材料的影响是。因此,场景中的所有对象都设置了适当的材质属性非常重要。
您可能会对mentions all the common mistakes在尝试照亮场景时所做的这篇文章感兴趣。
您需要查找glColorMaterial函数,因为它们是设置材质属性的最简单方法。
答案 1 :(得分:2)
就像弗兰克所说,灯光是不可见的,它们仅用作渲染系统(硬件/软件)用来计算几何体最终颜色的光照方程的输入。
如果你想让某些东西看起来像一盏灯,你需要模仿你在看到明亮光源时所看到的效果。对于太阳来说,最引人注目的效果之一是光照。
有关生成轻量级的信息,请阅读此OpenGL Bloom Tutorial,这里有一些sample code在Java中使用GLSL生成bloom效果。
答案 2 :(得分:2)
根据您是否需要盛开式效果(如果是这样,请查看Josh Perry的答案)或者只是一个看似发光的非暗物体对象,您可能需要考虑这种简单的方法。
由于您已禁用光照,太阳将呈现为“全亮”,不会执行阴影或光照计算。