- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在实现 NURBS 曲面。我想要的只是在每次鼠标单击时 Y 轴上都有递减,所以它看起来像是有太阳或其他行星的重量。
#include <stdlib.h>
#include <glut.h>
int PI = 3.145;
int y = 0;
我在这里尝试做同样的事情,但输出没有变化
void myMouse(int button, int state, int x, int y) {
if (state == GLUT_LEFT_BUTTON && GLUT_DOWN) {
y++;
}
glutPostRedisplay();
}
代码在这里继续
GLfloat ctrlpoints[4][4][3] = {
{{-3.5, 1.0, -4.5}, {-0.5, 1.0,-4.5 }, {0.5, 1.0, -4.5 }, {3.5, 1.0,-4.5}},
{{-3.5, 1.0, -0.5}, {-0.5, -2.0 - y,-0.5 }, {0.5, -2.0 - y, -0.5 }, {3.5, 1.0,-0.5}},
{{-3.5, 1.0, 0.5}, {-0.5, 1.0, 0.5 }, {0.5, 1.0, 0.5 }, {3.5, 1.0, 0.5}},
{{-3.5, 1.0, 4.5}, {-0.5, 1.0, 4.5 }, {0.5, 1.0, 4.5 }, {3.5, 1.0, 4.5}}
};
void Sun() {
glPushMatrix();
glTranslatef(0, 1, 0);
glRotatef(2*PI, 1, 0, 0);
glutSolidSphere(0.5, 20, 20);
glPopMatrix();
}
void display(void)
{
int i, j;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0.0, 1.0, 1.0);
glPushMatrix();
glRotatef(45.0, 1.0, 1.0, 1.0);
for (j = 0; j <= 30; j++) {
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 100; i++)
glEvalCoord2f((GLfloat)i / 100.0, (GLfloat)j / 30.0);
glEnd();
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 100; i++)
glEvalCoord2f((GLfloat)j / 30.0, (GLfloat)i / 100.0);
glEnd();
}
glPopMatrix();
glPushMatrix();
glColor3f(1, 1, 0);
Sun();
glPopMatrix();
glFlush();
}
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-5.0, 5.0, -5.0*(GLfloat)h / (GLfloat)w, 5.0*(GLfloat)h / (GLfloat)w, -5.0, 5.0);
else
glOrtho(-5.0*(GLfloat)w / (GLfloat)h, 5.0*(GLfloat)w / (GLfloat)h, -5.0, 5.0, -5.0, 5.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(myMouse);
Sun();
glutMainLoop();
return 0;
}
这是我当前这段代码的硬编码输出,我希望每次单击鼠标按钮时它在 y 轴上递减:
最佳答案
ctrlpoints
是一个全局变量。一旦它被初始化,它只能通过赋值来改变。对变量 y
没有神奇的动态依赖。
您必须通过赋值更改ctrlpoints
的字段。改变ctrlpoints
的内容后,需要重新定义二维赋值器。
当鼠标左键被按下时,正确的条件是 button == GLUT_LEFT_BUTTON && state == GLUT_DOWN
。
请注意,因为 y
是 myMouse(int button, int state, int x, int y)
函数签名中形式参数的名称, y++
(在 myMouse
内)不会改变全局变量 y
的值,但会改变参数 的值y
。
添加一个函数initMap
并改变函数myMouse
和init
如下:
void initMap(void)
{
glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]);
glEnable(GL_MAP2_VERTEX_3);
glMapGrid2f(20, 0.0, 1.0, 20, 0.0, 1.0);
}
void myMouse(int button, int state, int px, int py)
{
if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
ctrlpoints[1][1][1] -= 1.0f;
ctrlpoints[1][2][1] -= 1.0f;
}
initMap();
glutPostRedisplay();
}
void init(void)
{
//glClearColor(1.0, 1.0, 1.0, 0.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
initMap();
}
预览:
关于c++ - OpenGL NURBS 曲面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53934033/
在航空工程中,跑道平面以上的高度 (Z) 与: 从起飞开始的下降距离 (X) 满载飞机使用的跑道长度 (Y)。 我们希望从已知 x 和 y 值的观察点 z 的数组中找到 z=f(x,y)。 z 在 x
我正在尝试为图形设置表面 View ,但是仍然出现错误,表明我已经必须导入SView了。我尝试的一切似乎都无法正常工作。以下代码中缺少任何内容吗?还是我忘了添加一些东西。 Firstclass.jav
我有一个由以下内容生成的数据结构(其中 [a] func1 和 func2 是占位符函数,[b] i1 等是占位符变量值): def func1(x,y,z): return x+y/z de
我有一个 NURBS surface它有 4 个弯曲的边缘。 (我有曲线的 4 个贝塞尔点) 我想用轴上的切片平面(不如 3DSMAX 先进!)对 NURBS 曲面进行切片,并计算切片平面和 NURB
我正在实现 NURBS 曲面。我想要的只是在每次鼠标单击时 Y 轴上都有递减,所以它看起来像是有太阳或其他行星的重量。 #include #include int PI = 3.145; int
我在 Abaqus 中编写脚本,在那里我用切圆(如奶酪)粉碎圆形和正方形。我需要在部件之间放置 Contact,所以我需要 Surface。 宏管理器生成: s1 = a.instances['kol
我正在尝试使用 Python 和 Matplotlib 渲染由 给出的多面体的 3D 表面 但是我的代码(如下所示)似乎没有正确绘制它。应该怎么做呢? 尝试失败: %matplotlib inline
我想绘制一个 3d 曲面,其参数形式为: x = (-2 * (s^2 - t)^ 3) y = log(t*(t-2*s^2)+2*s^2) z = 1/(s^2-t) 其中 s、t 是参数。我使
关于从Python中的点云进行3D网格重建的问题,有几个主题。通常,当X,Y,Z坐标可用并且不存在体积表示时,通过激光扫描获取。我已经尝试了许多库: matplotlib, mayavi, open3
我必须编写一个 C++ 程序,根据未组织的点列表,计算这些点所在的近似曲面并生成相应的 NURBS。我已经看过 OpenNurbs,但没有这方面的功能,而 libNURBS 但包含的功能被标记为“研究
我有以下问题: 下面是我在屏幕上绘制立方体的方法: void drawCube() { //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
我一直在研究地形 LOD 算法,但主要逻辑在 CPU 上: 我尝试将大部分逻辑转换为 opengl 管道的曲面 segmentation 控制和评估阶段,但没有任何显示: 我将代码缩减为基本的“hel
我正在学习 OpenGL,我想要一个中间有轻微隆起的表面。我目前正在使用这段代码,但我不确定如何调整 ctrl 点以使其成为我想要的方式。它目前像 我希望它是这样的: 我不完全确定我应该使用哪些控制点
我在这里使用标准的 matplotlib surfaceplot 作为示例。 from mpl_toolkits.mplot3d import axes3d import matplotlib.pyp
我想使用 R 包 rgl 绘制相交曲面。我有一个 3D 数据数组,在恒定“z”(数组 [,,n])处绘制曲面没有问题。但是,我不知道如何在同一个 rgl 图上绘制垂直面 (array[n,,])。 示
我正在创建一个建模软件。我的模型都是由平面多边形组成的,它们只是我用 OpenGL 显示的一组有序顶点。我已经进行了大量搜索,但令我惊讶的是,我没有找到与我正在寻找的应用程序相关的太多信息。 我正在尝
我使用了示例 here将我的镶嵌回调移动到不同的类。 代码编译,但回调代码永远不会执行。 回调类: template class SingularCallBack { public: typ
我有兴趣寻找软件来计算 3D 多面体的精确中轴(或您选择的术语!)。我想输出将是一个三角形面的列表,可能是边和顶点,代表内侧表面的连接点、薄片和接缝。理想情况下,我想要可以处理所有多面体的东西,包括凹
我想在 linux (fedora 12) 下使用 GTK 3 创建一个窗口,并使用 cairo-gl 后端在其上绘制一个简单的矩形,为此我想创建一个 cairo-gl 表面。我该怎么做,任何人都可以
我有 6 个点,它们都位于球体的表面,并且是八面体的顶点。我怎样才能在 3d 轴上探索球体内的这个八面体的表面? 我有以下代码,但它没有达到我的预期: from mpl_toolkits.mplot3
我是一名优秀的程序员,十分优秀!