我可以在 OpenGL ES 中指定每个面的法线并实现非平滑/平坦着色吗?

2023-11-21

我想在 OpenGL ES 2.0 中显示网格模型,它清楚地显示实际的网格,所以我不希望每个图元/三角形上都有平滑的着色。我能想到的唯一两个选择是

  1. 每个三角形都有自己的一组法线,所有法线都垂直于三角形表面(但我想我无法使用此选项在三角形之间共享顶点)
  2. 使用黑线表示三角形/基本边,并坚持使用共享顶点和每个顶点一个法线的正常方式

一定要这样吗?为什么我不能简单地读取基元而不指定任何法线并以某种方式让 OpenGL ES 2.0 在每个面上制作平面阴影?

类似问题类似的 Stackoverflow 问题,但没有解决方案的建议


因为为了在网格上添加阴影(任何、平滑或平坦),您需要一个光照模型,而 OpenGL ES 无法猜测它。 GL ES 2 中没有固定的管道,因此您无法使用任何内置函数来完成这项工作(使用内置照明模型)。

在平面着色中,整个三角形将使用相同的颜色绘制,这是根据其法线和光源之间的角度计算的(是的,您还需要一个光源,它可能只是透视图的原点)。这就是为什么每个三角形至少需要一个法线。

然后,GPU 以高度并行的方式工作,同时处理多个顶点(然后是片段)。为了提高效率,它不能在顶点之间共享数据。这就是为什么您需要为每个顶点复制法线的原因。

另外,正如您所说,您的网格不能再在三角形之间共享顶点,因为它们仅共享顶点位置,而不共享顶点法线。所以你需要把3 * NbTriangles缓冲区中的顶点,每个顶点都有一个位置和一个法线。您也无法享受使用三角形带/扇形的好处,因为您的任何一个面都不会与另一个面有共同的顶点(因为法线不同)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 OpenGL ES 中指定每个面的法线并实现非平滑/平坦着色吗? 的相关文章

  • 如何在 iOS OpenGL ES 2.0 中绘制星星

    这个问题以前就被问过 但在我的搜索中是好几年前的事了 答案始终是使用纹理映射 但我真正想做的是将星星表示为单个顶点 你可能认为我正在使用一种简单的方法 但事实上 单点光源实际上看起来相当不错和现实的 但我想用高斯模糊之类的东西来处理那个光点
  • OpenGL ES 2.0 中许多具有不同纹理的对象

    我是 OpenGL ES 2 0 的新手 它具有可编程管道 并且我正在移植使用不同纹理渲染许多对象的应用程序 那么这将需要为每个对象调用 glDrawArrays 并在调用之间更改纹理 或者还有另一种方法可以通过单个 glDrawArray
  • 使用 glShaderBinary 时出现致命信号 11 和 INVALID HEAP ADDRESS IN dlfree 错误

    设备 三星 Galaxy Note 安卓版本 4 0 4 我的应用程序使用 OpenGL 着色器将一些视觉效果应用于视频流 出于安全原因 我需要使用二进制着色器 我在用glSurfaceView and SurfaceTexture访问 O
  • OpenGL ES 片段着色器可以更改片段的深度值吗?

    OpenGL ES 2 0 中的片段着色器可以更改像素的 Z 值 深度 吗 在 OpenGL ES 2 0 中这是如何实现的 No gl FragDepth 这是 GLSL 桌面版本的一部分 在 OpenGL ES 中不存在 但是 您可以检
  • Android OpenGL ES 2:如何在主活动中使用 OpenGL 活动作为片段

    我对 Android 和 OpenGL ES 还很陌生 我必须在 OpenGL 中创建一个 GUI 并且我想将其用作Fragment在主要活动中 为了学习如何做到这一点 我尝试了 2 个教程 这个片段教程 http www techotop
  • 如何在 OpenGL ES 2.0 中绘制抗锯齿线?

    我正在尝试绘制一些已存储为顶点数组的轮廓 typedef struct float vertices int nrPoints VertexCurve list
  • 纹理不绘制

    我想在屏幕上绘制图像 但我得到的是黑色方块 但上面没有纹理 图像路径正确并已加载 因为矩形具有正确的大小 我有一个单独的类用于加载名为 Texture 的纹理 还有一个用于绘制名为 Sprite 的纹理的类 这是代码 Class Textu
  • OpenGL ES 和 OpenGL 兼容着色器

    我想要 OpenGL ES 和 OpenGL Windows 具有相同的着色器源 为此 我想定义自定义数据类型并仅使用 OpenGL ES 函数 一种方法是定义 define highp define mediump define lowp
  • 在 OpenGL-ES 2.0 中渲染多个 2D 图像

    我是 OpenGL 新手 正在尝试学习 ES 2 0 首先 我正在开发一款纸牌游戏 需要渲染多个纸牌图像 我跟着这个http www learnopengles com android lesson four introducing bas
  • TriangleMesh JavaFX 中 getNormals() 方法的用途是什么

    我目前正在开发 JavaFX 3D 应用程序 并在 TriangleMesh 类中遇到 getNormals 方法 正如 Triangle Mesh 类用于创建用户定义的 Java FX 3D 对象一样 其中getPoints 用于添加Po
  • 如何在MatLab中求曲线上一点的法向量

    我有一条曲线 我想找到该曲线上给定点的法线向量 稍后我必须找到该法线向量与另一个向量的点积 我尝试了MatLab的梯度函数 但我想当我们需要在特定点找到梯度时它不起作用 但我不确定我是否错了 请指导我如何在 MatLab 中实现这一目标 提
  • 使用 Three.js 在片段着色器中手动选择 mipmap 的 lod

    我正在使用 Three js 中的 glsl es 编写一个基于物理的着色器 为了添加镜面全局照明 我使用内部带有 mipmap 链的立方体贴图 dds 纹理 按照 CubeMapGen 的说明进行预先计算here http seblaga
  • 在android中使用OpenGL在按钮上单击绘制形状

    作为 android OpenGL 部分的新手 我已经下载了现场给出的示例使用 OpenGL ES 显示图形 http developer android com training graphics opengl index html so
  • OpenGL ES 2.0 通过共享 C++ 代码在 ios 和 android 上进行抗锯齿或平滑处理

    我对 OpenGL 和 ES2 0 还很陌生 我共享了c opengl es2代码 我用它在ios和android上绘制 使用ndk CMake 它大部分都可以工作 但现在我需要抗锯齿并且它有点令人困惑 我看到的解决方案是依赖于平台和and
  • 如何在android中录制视频的同时在视频上绘图,并保存视频和绘图?

    我正在尝试开发一款应用程序 允许我在录制视频时在视频上绘图 然后将录制内容和视频保存在一个 mp4 文件中以供以后使用 另外 我想使用camera2库 特别是我需要我的应用程序在高于API 21的设备上运行 并且我总是避免使用已弃用的库 我
  • 我什么时候应该调用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress?

    在 iOS6 中 我使用 OpenGL 在 AVFoundation 视频帧上进行一些渲染 我看过很多使用 CVPixelBufferLockBaseAddress 和 CVPixelBufferUnlockBaseAddress 的示例代
  • 法线在 openGL 中表现得很奇怪

    我一直在为 openGl 编写一个 obj 加载器 几何体加载得很好 但法线总是混乱的 我尝试在两个不同的程序中导出模型 但似乎没有任何效果 据我所知 这就是将法线放入 GL TRIANGLES 的方法 glNormal3fv norm1
  • 使用未声明的标识符“gl_InstanceID”

    大家好 我一直在IOS平台上尝试在OpenGLES2 0中进行实例化绘制 我的渲染代码 glEnableVertexAttribArray glVertexAttribPointer glDrawElementsInstancedEXT G
  • 旋转后平移

    我正在使用适用于 Android 的 OpenGL ES 2 0 我正在使用触摸屏平移和旋转模型 我的平移仅在 x y 平面内 并且我的旋转仅围绕 z 轴 想象一下 直接向下看桌子上的地图 移动到地图上的各个坐标 并且能够旋转地图在你正在看
  • Android:了解 OnDrawFrame、FPS 和 VSync (OpenGL ES 2.0)

    一段时间以来 我在 Android 游戏中遇到了运动精灵间歇性 卡顿 的情况 这是一个非常简单的 2D OpenGL ES 2 0 游戏 这是一个持续存在的问题 我已经多次重新访问过 在我的游戏循环中 我有 2 个 计时器 一个用于记录前一

随机推荐

  • Cocoa 类别命名约定的最佳实践

    我正在整理我古老的 Cocoa 代码以使用现代命名约定 关于最佳实践已有很多讨论 但我不确定一件事 我正在考虑为类别方法名称添加前缀 以确保唯一性 人们似乎普遍认为这是一个好主意 尽管大多数人可能不会打扰 我的问题是 怎么样NSDictio
  • 使用 AngularFirestore 和 firebase 时出现“错误 TypeError:Object(...) 不是函数”

    我想在我的应用程序中使用 firebase 和 angularfire2 首先 我安装了它们 并声明 在环境 ts中 export const environment production false firebase apiKey sfs
  • 锁屏上的 AVAudioPlayer

    我已经使用实现了一个音频播放器AVAudioPlayer not AVPlayer 我可以使用以下方法处理远程控制事件 到目前为止它工作得很好 但是我看到了另外两个subtypes对于这些事件 UIEventSubtypeRemoteCon
  • PIP (Python):导入错误:无法导入名称 _remove_dead_weakref

    我遇到了以下错误 我进行了很多搜索 但一直无法找到好的解决方案 请遇到此类错误并解决的任何人 请帮忙 File c python27 lib runpy py line 174 in run module as main main fnam
  • 为什么 JSON 文档没有完全消耗?

    我正在尝试从外部源检索 JSON 数据以进行练习 我已经准备好所有代码 但由于某种原因 我收到一条错误消息 指出该文档未完全使用 我已经观看并阅读了多个教程和指南 但似乎仍然无法正确理解 我也在堆栈中搜索答案 但由于我不知道出了什么问题 所
  • 默认 TextBlock 样式覆盖按钮文本颜色

    我的问题出现在 NET 3 5 SP1 中的 WPF 中 可以描述如下 我有一个默认的Style击中所有TextBlock我的用户界面中的元素 看起来就是这样 这对所有人来说都很好TextBlocks 除此之外我还有一个Button风格包括
  • 在 Spark 中禁用 Parquet 元数据摘要

    我有一个 Spark 工作 1 4 1 接收一系列 kafka 事件 我想将它们不断地保存为快子上的镶木地板 val lines KafkaUtils createStream ssc zkQuorum group topicMap map
  • 从指向成员变量的指针获取类和成员类型

    例如 template
  • 如何将 ngrok 与 Google Oauth 结合使用?

    我最近安装了 Ngrok 以便在手机上测试我的本地主机流星应用程序 我成功通过 ngrok 的隧道访问流星应用程序 但是 当我尝试使用登录时 我收到此错误消息 登录过程显示以下错误消息 400 That s an error Error r
  • 如何在 ASP.NET MVC 中查找操作的绝对 url?

    我需要做这样的事情 我正在使用 MVC 的 Beta 版本 但我不知道如何获取操作的绝对 url 我想做这样的事情 有没有辅助方法或 Page 方法来实现此目的 Click here了解更多信息 但本质上不需要扩展方法 它已经被烘焙出来了
  • 在 R 中生成具有多个条件的列值

    我有一个数据框z我想根据两个旧列的值创建新列z 以下是过程 gt z lt cbind x 1 10 y 11 20 t 21 30 gt z lt as data frame z gt z x y t 1 1 11 21 2 2 12 2
  • Spring Boot下载jsp文件

    我正在使用 spring boot 简单应用程序来显示 JSP 然而 页面不是渲染 JSP 而是下载到浏览器中 请建议 应用程序属性 spring datasource url jdbc mysql 127 0 0 1 3306 tcadm
  • 无法导入新的 Gradle 项目:找不到构建工具修订版 *.0.0

    当我启动 Android Studio 并选择 新建项目 并创建一个新项目时 我收到以下弹出错误 无法导入新的 Gradle 项目 找不到构建工具修订版 17 0 0 有关更多详细信息 请查阅 IDE 日志 帮助 显示日志 我很想查阅 ID
  • Pandas 将字符串转换为 int

    我有一个带有 ID 号的大型数据框 ID head Out 64 0 4806105017087 1 4806105017087 2 4806105017087 3 4901295030089 4 4901295030089 目前这些都是字
  • 如何解决本机 Java 或 Kotlin 中的错误“依赖项的 AAR 元数据中指定的 minCompileSdk (31)”? [复制]

    这个问题在这里已经有答案了 错误信息 依赖项的 AAR 元数据中指定的 minCompileSdk 31 META INF com android build gradle aar metadata properties 更大 比该模块的c
  • GtkGLArea 小部件 (GTK+) 的 Vulkan 等效项是什么?

    背景 我想编写一个 CAD 应用程序 我想用Vulkan实现所有渲染 我想使用 GTK 我不想要一个 可见的 不同的窗口来显示对象的渲染图像 所以我研究并发现GtkGLAreawidget 它似乎可以满足我的需求 但是对于 OpenGL 有
  • UIView 隐藏属性...还有更多吗?

    来自 ActionScript 我会将 Sprites 设置为visible false 以防止它们在布局等内容中被计算 并确保它们不会响应事件 在 iOS 开发中 我将继续这样做 如果不需要 UIView 我可以将其 alpha 动画设置
  • 在 .NET 2.0 中将位图转换为一张多页 TIFF 图像

    如何将位图数组转换为 TIFF 格式的全新图像 并将所有位图作为帧添加到这个新的 tiff 图像中 使用 NET 2 0 从第一个位图开始 将其放入 Image 对象中 Bitmap bitmap Bitmap Image FromFile
  • 一切都是一种表达

    我注意到许多语言 如 Ruby 和 CofeeScript 以及转编译器 都支持表达式 现在 它使语言变得更容易理解 并且表面上看起来确实很简洁 但我可能正在寻找一些关于这两种方法的积极和消极的学术出版物 如果出版物有明确的例子来比较将一切
  • 我可以在 OpenGL ES 中指定每个面的法线并实现非平滑/平坦着色吗?

    我想在 OpenGL ES 2 0 中显示网格模型 它清楚地显示实际的网格 所以我不希望每个图元 三角形上都有平滑的着色 我能想到的唯一两个选择是 每个三角形都有自己的一组法线 所有法线都垂直于三角形表面 但我想我无法使用此选项在三角形之间