c++ - 计算水面的切线
问题描述
所以我有一个项目,我通过使用正弦波在 x 和 z 中调制网格来模拟 opengl 中的水面。我正在绘制法线、切线和副法线。在 x 或 z 中调制波时,所有切线都正确绘制,但是,同时在 x 和 z 中调制会破坏切线!!!帮助。这是我计算偏导数和矢量图的代码。
float dydx = calcDerivativeX(water->waves, x, g.gameTime);
float dydz = calcDerivativeZ(water->waves, z, g.gameTime);
glColor3f(1,0.5,0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, orange);
drawVector(x, calcAddSines(water->waves, x, z, g.gameTime), z, 1.0, dydx, 0.0, 0.05);
glColor3f(1,0,1);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, magenta);
drawVector(x, calcAddSines(water->waves, x, z, g.gameTime), z, -dydx, 1.0, -dydz, 0.05);
glColor3f(1,1,0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, yellow);
drawVector(x, calcAddSines(water->waves, x, z, g.gameTime), z, 0, dydz, 1.0, 0.05);
float calcDerivativeX(vector<Wave> waves, float x, float t) {
float result = 0;
for(Wave w : waves) {
result += w.a * w.kx * cosf((w.kx * x) + (w.w*t));
}
return result;
}
float calcDerivativeZ(vector<Wave> waves, float z, float t) {
float result = 0;
for(Wave w : waves) {
result += w.a * w.kz * cosf((w.kz * z) + (w.w*t));
}
return result;
}
float calcAddSines(vector<Wave> waves, float x, float z, float t) {
float y = 0;
for(Wave w: waves) {
y += calcY(w, x, z, t);
}
return y;
}
解决方案
推荐阅读
- java - java中的自过期对象(Timertask)
- javascript - React.js - 如何在页面加载时提交表单?
- c++ - 从 Windows C++ 应用程序执行 powershell 脚本
- python - 请求模块的python中的vpn
- java - 使用 Java Spring MVC + Thymeleaf 更新网页元素而不刷新
- postgresql - 获取以下信息的正确查询是什么
- django - 这种方法有什么超级之处?
- gcc - Mac OS 的链接器问题
- angular - 无法在数组中获取随机项(Angular 10)
- python - 如何访问子文件夹中的静态文件?