Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es 使用OpenGL ES绘制三维模型的轮廓_Opengl Es_Rendering_Shader_Fragment Shader - Fatal编程技术网

Opengl es 使用OpenGL ES绘制三维模型的轮廓

Opengl es 使用OpenGL ES绘制三维模型的轮廓,opengl-es,rendering,shader,fragment-shader,Opengl Es,Rendering,Shader,Fragment Shader,我需要添加这个经典效果,它包括通过笔划轮廓高亮显示3D模型,例如(没有透明渐变,只有实心笔划): 我找到了一种方法来实现这一点,它看起来很简单,也很容易实现。这家伙在玩模具缓冲区来计算模型形状,然后他用线框绘制模型,线条的厚度就完成了这项工作。 这是我的问题,线框。我使用的是OpenGL ES 2.0,这意味着我不能使用glPolygonMode将渲染模式更改为GL\u LINE 我被困在这里,我找不到任何简单的替代方法,目前我找到的最相关的解决方案是自己实现线框渲染,这显然不是最简单的解决方

我需要添加这个经典效果,它包括通过笔划轮廓高亮显示3D模型,例如(没有透明渐变,只有实心笔划):

我找到了一种方法来实现这一点,它看起来很简单,也很容易实现。这家伙在玩模具缓冲区来计算模型形状,然后他用线框绘制模型,线条的厚度就完成了这项工作。 这是我的问题,线框。我使用的是OpenGL ES 2.0,这意味着我不能使用
glPolygonMode
将渲染模式更改为GL\u LINE

我被困在这里,我找不到任何简单的替代方法,目前我找到的最相关的解决方案是自己实现线框渲染,这显然不是最简单的解决方案。为了绘制我的对象,我使用了
glpaurements
和GL_三角形作为基本体,我尝试使用GL_三角形作为基本体,但结果肯定不是正确的


用OpenGL ES绕过
glPolygonMode
的不足有什么想法/技巧吗?提前感谢。

在OpenGL ES 2中为模型绘制轮廓或边框并不像您提到的示例那样简单

方法1: 最简单的方法是多次传球

步骤1(形状过程):仅渲染对象,并使用相同的摄影机设置将其绘制为黑色。并用不同的颜色绘制所有其他像素

第2步(渲染过程):这是通常的渲染过程,实际绘制的对象为真实颜色。每次创建碎片时,必须测试ShapePass图像上相同像素的颜色,以查看附近的8个像素中是否有颜色不同的像素。如果附近的所有像素颜色相同,则片段不表示边框,否则添加一些颜色以绘制边框


方法2:还有其他技术可以在一次传递中提供类似的效果。您可以绘制同一对象两次,第一次使用单一颜色稍微放大,然后使用真实颜色

在OpenGL ES 2中为模型绘制轮廓或边框并不像您提到的示例那样简单

方法1: 最简单的方法是多次传球

步骤1(形状过程):仅渲染对象,并使用相同的摄影机设置将其绘制为黑色。并用不同的颜色绘制所有其他像素

第2步(渲染过程):这是通常的渲染过程,实际绘制的对象为真实颜色。每次创建碎片时,必须测试ShapePass图像上相同像素的颜色,以查看附近的8个像素中是否有颜色不同的像素。如果附近的所有像素颜色相同,则片段不表示边框,否则添加一些颜色以绘制边框


方法2:还有其他技术可以在一次传递中提供类似的效果。您可以绘制同一对象两次,第一次使用单一颜色稍微放大,然后使用真实颜色

感谢这些方法,我想我会尝试方法1,它实际上非常好,因为它使用的过滤器就像反别名一样(最后,它有点像同一个问题),这意味着您可以通过更改过滤器获得不同的结果。我看到的唯一问题是,它将创建一个半内/半外边界,但在我的情况下,我并不介意。再次感谢。感谢这些方法,我想我会尝试方法1,它实际上非常好,因为它使用的过滤器就像反别名一样(最后也是同样的问题),这意味着您可以通过更改过滤器获得不同的结果。我看到的唯一问题是,它将创建一个半内/半外边界,但在我的情况下,我并不介意。再次感谢。