- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
(编辑):我发布的原始代码适用于 gouraud 和 phong 着色选项。我已经改变了它所以它只是 phong 阴影并在下面发布。网格太大,无法在此处进行描述,因为它是从 Bezier Patch 生成的。
我在 Open GL 3 Mesa 9 中遇到了一些平面和 phong 着色问题。似乎无论我做什么我都会得到平面阴影图形,带有微小的面(平面)并且我无法使 Blinn-Phong 着色工作.
这是我的着色器:
(顶点着色器)
//material parameters
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;
uniform float Shininess;
attribute vec4 vPosition;
//attribute vec4 vColor;
attribute vec4 vNormal;
attribute vec4 vControlColor;
attribute vec2 texcoord;
uniform mat4 model_view;
uniform mat4 projection;
uniform int flag;
uniform int phong_flag;
uniform vec4 eye_position;
//lighting parameters
uniform vec4 light_1; //light 1 position
uniform vec4 light_2; //light 2 position
varying vec4 control_color;
varying vec4 color;
varying vec4 position;
varying vec4 normal;
varying vec2 st;
void
main()
{
control_color = vControlColor;
position = vPosition;
normal = vNormal;
tex_coords = texcoord;
st = texcoord;
gl_Position = projection*model_view*vPosition;
}
还有我的片段着色器:
//material parameters
uniform vec4 AmbientProduct, DiffuseProduct, SpecularProduct;
uniform float Shininess;
uniform vec4 eye_position;
uniform int phong_flag;
//lighting parameters
uniform vec4 light_1; //light 1 position
uniform vec4 light_2; //light 2 position
varying vec4 light_2_transformed; //light 2 transformed position
uniform int Control_Point_Flag;
uniform sampler2D texMap;
varying vec4 color;
varying vec4 position;
varying vec4 normal;
varying vec4 control_color;
varying vec2 st;
void
main()
{
vec4 N = normalize(normal);
vec4 E = normalize(eye_position - position);
vec4 L1 = normalize(light_1 - position);
vec4 L2 = normalize(light_2 - position);
vec4 H1 = normalize( L1 + E);
vec4 H2 = normalize( L2 + E);
//calculate ambient component
vec4 ambient = AmbientProduct;
//calculate diffuse componenent
float k_d_1 = max(dot(L1,N), 0.0);
float k_d_2 = max(dot(L2,N), 0.0);
vec4 diffuse1 = k_d_1*DiffuseProduct;
vec4 diffuse2 = k_d_2*DiffuseProduct;
//calculate specular componenent
float k_s_1 = pow(max(dot(N, H1), 0.0), Shininess);
float k_s_2 = pow(max(dot(N, H2), 0.0), Shininess);
vec4 specular1 = k_s_1*SpecularProduct;
vec4 specular2 = k_s_2*SpecularProduct;
//if specular color is behind the camera, discard it
if (dot(L1, N) < 0.0) {
specular1 = vec4(0.0, 0.0, 0.0, 1.0);
}
if (dot(L2, N) < 0.0) {
specular2 = vec4(0.0, 0.0, 0.0, 1.0);
}
vec4 final_color = ambient + diffuse1 + diffuse2 + specular1 + specular2;
final_color.a = 1.0;
/* gl_FragColor = final_color; */
gl_FragColor = final_color*texture2D(texMap, st);
}
我的着色器看起来一切正常吗?
最佳答案
注意事项:
position
。因此,您的顶点“position
”是从您的 OpenGL 应用程序传递的任何内容,并且不受您可能尝试执行的任何转换的影响,尽管它们在物理上放置正确,因为您将矩阵用于 gl_Position
.但是,您在 OpenGL 端的法 vector 可能是罪魁祸首。参见 this question以获得对不需要的平面阴影的可能来源的很好解释。
附带说明一下,您的两个着色器似乎都比应有的复杂。也就是说,它们有太多未使用的变量和太多可以压缩成更少行的内容。这只是家务管理,但它会让您更轻松地跟踪您的代码。
关于c++ - 平面和 phong 着色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16848805/
我的类笔记已经清楚地表明这两者是不一样的。我知道 Phong 照明模型是环境光 + 漫反射 + 镜面反射,但是在照明方面,Phong Shading 在哪里发挥作用? BRDF 呢? 最佳答案 照明模
我目前有一项任务是在 openGL/GLSL 中实现 Phong 光照模型。我目前正在使用的两个着色器如下。问题是,在片段着色器中,如果我不将 vColor 添加到 gl_FragColor,那么整个
问题:谁能告诉我网络摄像头拍摄的面部图像的 Phong 反射模型参数? 详细信息: 我正在使用本文中的 3D 可变形模型对 2D 图像进行 3D 重建 Vetter & Blanz, 2003 . 有
我正在根据 Phong Model 编写着色器.我正在尝试实现这个等式: 其中 n 是法线,l 是光的方向,v 是相机的方向,r 是光反射。维基百科文章中更详细地描述了方程式。 截至目前,我只在定向光
我正在学习 Phong 着色并遇到一些困惑: Phong 着色中光线位置的坐标是多少? (模型空间、模型 View 或其他什么?) 根据这个:http://www.ozone3d.net/tutori
我试图弄清楚如何使用 phong 模型通过照明照明来缩放颜色。例如,给定 I = KaAx,其中 ka 是环境系数,Ax 是环境照明强度,其中 x 可以是 r b 或 g,我想将其应用于纹理颜色为 (
我正在尝试实现 Phong 着色模型,但我不确定如何选择光源。更具体地说,我不明白光源应该是什么样子。它应该是vec3吗?或者也许是我在 Java 代码中定义的矩阵?另外,如果我们假设我希望相机作为光
我正在尝试制作一个立方体,它是不规则的三角剖分,但几乎共面,阴影正确。 这是我目前的结果: 带线框: 在我的程序中计算的法线: 由 meshlabjs.net 计算的法线: 当为立方体使用常规大小的三
我需要为我的地形网格创建一个相当简单的着色器。着色器必须根据世界地图(图像)的颜色使用不同的漫反射和法线纹理,必须接收阴影并使用灯光。 默认的 phong 着色器由许多包含项组成,我可以在哪里更改或只
所以我在使用 Phong 模型时遇到了问题,特别是漫反射分量以及使用正确的法 vector 和光 vector 的方向。这是一个学校项目,但我不在乎我是否没有完成它,只要有人能告诉我我做错了什么。我已
我正在尝试将 Phong 照明添加到我已经加载了带有纹理的网格的场景中。这是我的网格加载类: #define INVALID_OGL_VALUE 0xFFFFFFFF #define INVALID_
(编辑):我发布的原始代码适用于 gouraud 和 phong 着色选项。我已经改变了它所以它只是 phong 阴影并在下面发布。网格太大,无法在此处进行描述,因为它是从 Bezier Patch
我正在世界空间坐标中实现法线/凹凸贴图(我发现它们更容易使用)并且我的照明在没有法线贴图的情况下也能正常工作,但是当引入法线贴图(以及使用 TBN 矩阵计算的新 vector )时我的照明的镜面反射组
我正在尝试创建一个基本的 Phong 照明着色器以了解着色器中的照明。另外,我正在使用 openframeworks。我创建了 3 个立方体,它们有一个围绕它们旋转的相机。照明似乎正常工作(有点),但
我目前正在用 C++ 实现一个基本的光线追踪器。到目前为止效果很好,哑光 Material (具有环境光和漫反射 brdf)到目前为止按预期工作。 添加镜面高光会导致完整的 Phong Model这正
我正在尝试使用 phong Material 实现平面着色。正如文档所说,我们必须在创建 Material 时在配置中设置 flatShading:true。我用这些设置创建了一个立方体,并创建了一个
据我了解,Gouraud shading 计算每个顶点的光色并对该颜色进行插值,而 Phong shading 为每个像素插值法线并根据该插值计算光色。 然而,当我试图从数学上推导出浅色时,我最终得到
过去几周我一直在学习 OpenGL,但在实现 Phong 着色器时遇到了一些麻烦。尽管我使用了 smooth 限定符,但它似乎没有在顶点之间进行插值。我在这里错过了什么吗?为了给予应有的赞扬,顶点和片
我正在尝试在 Vulkan 着色器中为单个光源实现 Blinn-Phong 着色,但我得到的结果不是我所期望的。 输出如下所示: 灯光位置应在相机右侧的后面,这在图里上正确表示,但在圆圈上却没有。我不
我正在阅读 opengl.org 中的以下 Phong 照明着色器: Phong Illumination in Opengl.org 顶点和片段着色器如下: 顶点着色器: varying vec3
我是一名优秀的程序员,十分优秀!