小编Inf*_*nfJ的帖子

在 GLSL C++ 中将射线与三角形相交

我正在尝试与片段着色器中的三角形进行光线交叉,如果它发生碰撞,我将在纹理中绘制一个黑点,如果没有碰撞,我将绘制纹理颜色。但它没有效果,我不知道有什么办法解决它。

它是地面的着色器并且具有来自顶点的几何体的坐标,该几何体将在地面着色器之后绘制。颜色也来自顶点着色器,光点是一个 vec3,在空间中有一个点,我想创建一条从片段位置到光点的光线,看看它是否与我创建的几何体发生碰撞在代码中。在我需要查看纹理中的交点是否为 alpha 之后,这将是下一个问题,现在我需要查看地面中几何体的阴影。

#version 330 core

#define INTERSECT_EPSILON 0.0001

out vec4 FragColor;

in vec2 TexCoord;

in  vec3 geometryP;
in  vec3 lampP;
in  vec3 colorP;
in  vec3 imagePos;

//texture samplers
uniform sampler2D groundTexture;
uniform sampler2D treeTexture;

struct Ray
{
    vec3 Origin;
    vec3 Direction;
};


float dot(vec3 firstPoint, vec3 secondPoint)
{
    return (firstPoint.x * secondPoint.x + firstPoint.y * secondPoint.y + firstPoint.z * secondPoint.z);
}

vec3 cross(vec3 firstPoint, vec3 secondPoint)
{
    vec3 crossResult;

    crossResult.x =  firstPoint.y*secondPoint.z - firstPoint.z*secondPoint.y;
    crossResult.y  = firstPoint.z*secondPoint.x …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl fragment-shader

4
推荐指数
1
解决办法
1410
查看次数

标签 统计

c++ ×1

fragment-shader ×1

glsl ×1

opengl ×1

shader ×1