问题标签 [phong]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
378 浏览

3d - 球体在使用纹理渲染时显示多边形

我一直在修补在 XNA/D3D (DX11) 中渲染台球。我编写了一个 Blinn-Phone 着色器,它使用 HLSL 中的 SamplerState 将我的台球纹理映射到我在 VisualStudio2012 中生成的球体 FBX。

我遇到了两个问题,这两个问题都在下图中最右边的球上最明显。

1)您可以看到纹理揭示了球体的底层多边形所在的位置。
2)在第三行的底部边缘,条纹下方只有一点白色,看起来非常锯齿或锯齿状。

纹理应用似乎在很大程度上超出了我的控制范围,因为顶点法线之间的插值是在管道内完成的,而不是由我完成的。

那么,我该如何改进呢?生成具有更多多边形的新球体?

我为抗锯齿做了以下工作,但坦率地说,如果有的话,它似乎做的很少:

这是我的纹理贴图状态,它的价值。任何想法将不胜感激。如果您需要更多信息,请告诉我!

台球渲染

0 投票
1 回答
92 浏览

opengl - 组成 ADS (Phong/Gourang) 组件

我有下面的 Phong 光照模型的基本着色器代码。我已经测试了漫反射、环境光和镜面光,它们产生了正确的结果。当谈到在最后一行中组合它们时,我不断得到一种看起来像环境照明的效果。有人知道它有什么问题吗?

0 投票
2 回答
1051 浏览

directx - Phong 着色与曲面细分

我在查看源引擎时遇到了Phong Shading 。描述听起来很像Tessellation。但是当我查找它时,我并没有发现任何直接将两者进行比较的东西。现在 DirectX Tessellation 不像 HLSL 中的 Phong 着色那样使用。有什么不同?我应该使用哪一个?

0 投票
1 回答
2064 浏览

c++ - flat 和 phong 着色问题

(编辑):我发布的原始代码适用于 gouraud 和 phong 着色选项。我已经改变了它,所以它只是 phong 阴影并发布在下面。网格太大,无法在此处描述,因为它是从 Bezier 补丁生成的。

我在 Open GL 3 Mesa 9 中遇到了平面和 phong 阴影的一些问题。似乎无论我做什么,我都会得到平面阴影图形,带有微小的刻面(平面),我无法让 Blinn-Phong 阴影工作。

这是我的着色器:

(顶点着色器)

还有我的片段着色器:

我的着色器看起来一切正常吗?

0 投票
1 回答
312 浏览

c++ - 当我尝试渲染三角形网格时崩溃(c++)

我正在尝试使用 GLSL 渲染带有 Phong 着色的三角形网格,这是我分配法线的方法。

getvertexnormal 代码如下所示:

每次我运行它时,它看起来像是开始渲染,然后一秒钟后它崩溃并给我一个异常:

“ glutglsl.exe 中 0x7562B727 处未处理的异常:Microsoft C++ 异常:内存位置 0x0028F1C8 处的 std::bad_alloc。”

如果我注释掉 getvertexnomral() 部分而不是

我写的

但它看起来不正确(http://imgur.com/lxSUMAq

所以我认为getvertexnormal() 有问题。

顺便说一句,我在这方面完全是新手。我的片段着色器(GLSL)中有我所有的 phong 计算。要在大三角形网格上实现 phong 着色,这是正确的方法吗?

0 投票
1 回答
2928 浏览

opengl - 来自 GLSL phong 着色器的奇怪镜面反射结果

我正在尝试在 GLSL 中实现 phong 着色,但镜面反射组件存在一些问题。

奇怪的镜面效果

绿光是镜面反射分量。光(点光)在平面上方的圆圈中传播。镜面高光总是向内指向 Y 轴,光线围绕 Y 轴旋转,并向图像中看到的漫反射扇形散开。它似乎完全不受相机位置的影响,我不确定我哪里出错了。

顶点着色器代码:

片段着色器代码:

请注意,在顶点着色器中看到的 normalTransformMatrix 是模型视图矩阵的逆转置。

我正在设置一个从顶点位置到灯光、到相机和反射矢量的矢量,所有这些都在相机空间中。对于漫反射计算,我采用光矢量和法线矢量的点积,对于镜面反射分量,我采用反射矢量和视图矢量的点积。也许我对算法有一些基本的误解?

起初我以为问题可能是我没有对插值后进入片段着色器的法线进行归一化,但是添加一条线进行归一化并不会影响图像。我不知道在哪里看。

我知道网站上有很多 phong shading 问题,但每个人似乎都有一个有点不同的问题。如果有人能看出我哪里出错了,请告诉我。任何帮助表示赞赏。

编辑:好的,现在可以工作了!正如 jozxyqk 下面建议的那样,我需要对我的顶点位置进行 mat4*vec4 操作,否则会丢失翻译信息。当我第一次进行更改时,我得到了奇怪的结果,直到我意识到我在将 lightPosition_cameraSpace 传递给着色器之前在我的 OpenGL 代码中犯了同样的错误(错误是我将视图矩阵转换为 mat3用于计算,而不是将光位置矢量设置为 vec4)。一旦我编辑了这些行,着色器似乎工作正常!感谢您的帮助,jozxqk!

0 投票
1 回答
452 浏览

c++ - 使用 phong 照明的纹理映射

我试图将 Phong 照明添加到我已加载带有纹理的网格的场景中。这是我的网格加载类:

顶点着色器:

片段着色器:

这就是我得到的: 之前

但是当我尝试添加 phong 照明时,当我在顶点着色器中添加法线属性时,这就是我得到的

问题出在哪里?谢谢你的帮助。

//编辑着色器加载和链接

设置制服

0 投票
2 回答
3066 浏览

opengl - 镜面光照出现在物体的正面和背面

我正在编写一个 Phong 着色的小测试,并且正在将我的头撞在砖墙上,试图让镜面反射组件工作。它似乎可以正常工作,除了镜面光同时应用于对象的前部和后部。(对象本身是透明的,面在 CPU 端手动排序。)

请注意,漫反射组件工作得很好(仅显示在面向光源的一侧)——我认为这似乎排除了法线到达片段着色器的问题。

据我了解,镜面反射分量与眼睛矢量和反射光矢量之间的角度的余弦成正比。

为了让事情变得超级简单,我的测试代码尝试在世界空间中执行此操作。相机位置和光矢量分别被硬编码(对不起(0,0,4)(-0.707, 0, -0.707)。因此,眼向量为(0,0,4) - fragPosition

由于模型矩阵只执行旋转,顶点着色器只是简单地通过模型矩阵变换顶点法线。(注意:这不是很好的做法,因为许多类型的变换不保留法线正交性。通常对于法线矩阵,您应该使用模型矩阵左上角 3x3 的逆转置。)为了简单起见,片段着色器在单个浮点颜色通道上运行,并跳过镜面反射指数(/使用指数 1)。

顶点着色器:

片段着色器:

我在这里找不到错误;谁能解释为什么镜面反射分量出现在物体的背面和面向光的一侧?

非常感谢。

0 投票
1 回答
514 浏览

c++ - 镜面光出现在两侧

我有一个非常奇怪的高光(phong 光模型)光行为。它似乎出现在所有物体的两侧。有谁知道可能是什么问题?实际计算似乎没问题,因为我可以看到光线随着物体旋转而改变其位置。

顶点着色器

在此处输入图像描述

0 投票
0 回答
123 浏览

c++ - 镜面光是点还是方向?

镜面光是否将一个点或方向作为光?如果是方向,则应该计算诸如LightPosition - VertexPosition吗?或者就像手动指定的 LightDirection 一样?