计算机图形学:绘制一个3d交互场景(1)

这篇具有很好参考价值的文章主要介绍了计算机图形学:绘制一个3d交互场景(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenGL作为一种图形与硬件的接口,与其他图形程序开发工具相比较,它提供了众多图形函数,直观的编程环境简化了三维图形的绘制过程,使用OpenGL搭建一个三维场景,能够通过输入设备与场景内物体交互。
计算机图形学:绘制一个3d交互场景(1)
豪华单间

配置环境:vs22+freeglut库

1.绘制墙体使其成为封闭空间,在封闭空间内完成场景的布置

//空间基本架构
void drawWall()
{
    glColor3f(0.47, 0.54, 0.60);//rgb颜色可调
    GLfloat matWall[] = { 0.37, 0.83, 0.98};
	GLfloat matBlack[] = { 0, 0, 0, 1 };
	GLfloat matWhite[] = { 1, 1, 1, 1 };
	GLfloat matShininess[] = { 40 };
	glMaterialfv(GL_FRONT, GL_AMBIENT, matWall);
	glMaterialfv(GL_FRONT, GL_DIFFUSE, matWall);
	glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
	glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
	glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
    // 左边
    drawQuads(-10, 10, -20,
        -10, 10, 0,
        -10, -10, 0,
        -10, -10, -20);
    // 右边
    drawQuads(10, -10, -20,
        10, -10, 0,
        10, 10, 0,
        10, 10, -20);
    // back
    drawQuads(10, 10, -20,
        -10, 10, -20,
        -10, -10, -20,
        10, -10, -20);
    // 天花板
    drawQuads(10, 10, -20,
        10, 10, 0,
        -10, 10, 0,
        -10, 10, -20);
    // 地板
    glColor3f(0.75, 0.75, 0.75);
    drawQuads(-10, -10, -20,
        -10, -10, 0,
        10, -10, 0,
        10, -10, -20);
}

glMaterialfv ()函数指定照明模型的材料参数。
计算机图形学:绘制一个3d交互场景(1)
2.绘制一张床将其放在角落(左)

void drawBed()
{
    glColor3f(1, 0.8, 0.5);
    glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
    glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
    glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
    // 床头
    glPushMatrix();
    glTranslatef(-9.5, -6, -16);
    glScalef(1, 8, 8);
    glutSolidCube(1);
    glPopMatrix();
    // 床尾
    glPushMatrix();
    glTranslatef(4.5, -8.5, -16);
    glScalef(1, 3, 8);
    glutSolidCube(1);
    glPopMatrix();
    //床板
    glPushMatrix();
    glTranslatef(-2, -7, -16);
    glScalef(14, 1, 8);
    glutSolidCube(1);
    glPopMatrix();
    //床垫
    glColor3f(0.6, 0.97, 0.6);
    glMaterialfv(GL_FRONT, GL_AMBIENT, matGreen);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, matGreen);
    glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
    glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
    glPushMatrix();
    glTranslatef(-2, -6, -16);
    glScalef(14, 1, 8);
    glutSolidCube(1);
    glPopMatrix();
}

效果图如下:
计算机图形学:绘制一个3d交互场景(1)
3.房间的一些基本配置

void drawDesk()
{
    glColor3f(1, 0.8, 0.5);
    glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
    glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
    glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);
	//书桌
    glPushMatrix();
    glTranslatef(9, -4, -10);
    glScalef(4, 0.5, 20);
    glutSolidCube(1);
    glPopMatrix();

    glPushMatrix();
    glTranslatef(9.75, -7, -10);
    glScalef(0.5, 6, 20);
    glutSolidCube(1);
    glPopMatrix();
	//床头柜
	glPushMatrix();
    glTranslatef(-8, -8, -10);
    glScalef(4, 4, 4);
    glutSolidCube(1);
    glPopMatrix();
}

这桌子建议改成实体的bushi
计算机图形学:绘制一个3d交互场景(1)再添置一个茶壶 bushi

void drawTeapot()
{
    glColor3f(0.80,0.71,0.34);
    glMaterialfv(GL_FRONT, GL_AMBIENT, matBrown);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, matBrown);
    glMaterialfv(GL_FRONT, GL_SPECULAR, matWhite);
    glMaterialfv(GL_FRONT, GL_SHININESS, matShininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, matBlack);

    glPushMatrix();
    glTranslatef(-8, -5.5, -10);
    glRotatef(-100, 0, 1, 0);
    glutSolidTeapot(0.8);
    glPopMatrix();
}

计算机图形学:绘制一个3d交互场景(1)
场景先写到这儿吧,其他物品随意可加的,下一篇写画安卓精灵求个关注
完整源码评论区留邮箱文章来源地址https://www.toymoban.com/news/detail-510348.html

到了这里,关于计算机图形学:绘制一个3d交互场景(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机图形学】【实验报告】太阳系绘制、B样条曲线绘制(附代码)

    实 验 报 告 一、实验目的 掌握三维图形的显示原理和方法,掌握三维观察的原理和方法; 掌握OpenGL中矩阵堆栈函数的使用,会使用堆栈函数进行复杂场景的组装。 掌握OpenGL中三维观察变换常用的函数的使用方法,了解三维模型的贴图方法; 掌握自由曲线的生成方法,熟练

    2024年02月10日
    浏览(41)
  • 计算机图形学(三) -- 3D 变换

    同样引入齐次坐标: 3D 点 = ( x , y , z , 1 ) T (x, y, z, 1)^T ( x , y , z , 1 ) T 3D 向量 = ( x , y , z , 0 ) T (x, y, z, 0)^T ( x , y , z , 0 ) T 通常, ( x , y , z , w ) (x, y, z, w) ( x , y , z , w ) (w != 0) 表示一个坐标为 ( x / w , y / w , z / w ) (x/w, y/w, z/w) ( x / w , y / w , z / w ) 的 3D 点 用一个 4x4 的矩阵来表示

    2024年02月08日
    浏览(39)
  • 计算机图形学中的曲线问题——拉格朗日插值曲线绘制实践

    限于篇幅,我们将在这篇文章中介绍拉格朗日插值曲线绘制实践,主文章链接: GGN_2015 计算机图形学中的曲线问题 在主文章中我们已经介绍了拉格朗日插值函数的绘制方法。给定一个函数必须通过的点的集合,保证任意两点 x x x 指不同,我们就能构造出一条拉格朗日插值函

    2024年02月14日
    浏览(45)
  • 计算机图形学:三次Bezier曲线的绘制(算法原理及代码实现)

    一、实现方案        贝塞尔曲线原理:贝塞尔曲线是计算机图形图像造型的基本工具,是图形造型运用得最多的基本线条之一。它通过控制曲线上的四个点(起始点、终止点以及两个相互分离的中间点)来创造、编辑图形。其中起重要作用的是位于曲线中央的控制线。这条

    2024年02月11日
    浏览(51)
  • 【计算机图形学 】扫描线多边形填充算法 | OpenGL+鼠标交互

    传送门 实现多边形扫描线填充算法,并和鼠标进行交互。 具体原理略过,会贴上完整代码,可直接运行。 环境: vs2019,OpenGL的库(可以搜索如何用vs使用OpenGL的库,可以使用vs自带的插件或者其他方法,很方便) 要点: 1.NET和AET的创建,改动 2.改变鼠标点击和鼠标拖拽的响应

    2023年04月08日
    浏览(74)
  • 计算机图形学的革命:从2D到3D

    计算机图形学是一门研究如何在计算机屏幕上生成图像的学科。从其出现以来,计算机图形学经历了两次革命性的变革:从2D到3D,以及从矢量图形到位置 Independent Bitmap Images(Pixels)。这篇文章将深入探讨从2D到3D的革命,揭示其背后的核心概念、算法原理、数学模型以及代码实

    2024年02月19日
    浏览(39)
  • 计算机图形学基础:2D/3D坐标变换(Transformation)

    本文讲解了2D变换和3D变换式如何用矩阵表示的 如何将线性和非线性变换进行一个统一表示形式 三维物体在二维空间上的映射 表示向量添加了一维,分别表示单位距离和平移不变形的方向 旋转默认都是以(0, 0)为中心

    2023年04月08日
    浏览(41)
  • 计算机图形学环境配置java3D

    java3Dwindows64位下载 这个是默认到下图路径中:(记住这个路径,待会要导入jar包) 选择这个: 所以我把jdk改成了这个1.8版本就可以了: 将java3D目录下面的bin目录中的dll文件拷贝到idea里配置的jdk路径的bin目录下: idea里配置的jdk路径的bin目录: 把这个文件拷贝过去: 打开

    2024年02月09日
    浏览(37)
  • 计算机视觉 图像形成 几何图形和变换 3D到2D投影

            现在我们知道如何表示2D和3D几何图元以及如何在空间上转换它们,我们需要指定如何将 3D图元投影到图像平面上。 我们可以使用线性3D到2D投影矩阵来做到这一点。最简单的模型是正交法,它不需要除法就可以得到最终的(不均匀的)结果。更常用的模型是透视,

    2023年04月08日
    浏览(57)
  • 计算机图形学头歌实训平台答案——CG1-v2.0-直线绘制

    1.本关任务 (1)根据直线DDA算法补全line函数,其中直线斜率0k1; (2)当直线方程恰好经过P(x,y)和T(x,y+1)的中点M时,统一选取直线上方的T点为显示的像素点。 2.输入 (1)直线两端点坐标:(13, 20)和(180,140); (2)直线颜色为白色。 3.输出 程序运行结果为一条直线,具体结果如下图所示:

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包