3D绘图过程及原理简介

3D绘图&ax.plot_surface() 下面代码来自:Python plot_surface(Axes3D)方法:绘制3D图形 # -*- coding: utf-8 -*- """ Created on Mon Oct 7 21:57:52 2019 @author: qwy """ import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplo... 阅读详情

Standard Primitives(标准几何体)
 在创建命令面板的Geometry(几何体)对象类型中有如下几个次级分类项目:

· Standard Primitives(标准几何体):相对简单的几何体,如立方体、球体和锥体等。
· Extended Primitives(扩展几何体):相对复杂的几何体,如倒角柱体和纺锤体等。
· Compound Objects(合成物体):通过合成方式产生物体,如连接、变形和离散等。
· Particle Systems(粒子系统):产生微粒属性的物体,如雨、雪、喷泉和火花等。
· Patch Grids(网格面片):以面片方式创建网格模型,是一种独特的局部造型方法。
· NURBS Surfaces(NURBS曲面):用于创建复杂光滑的曲面,是一种全新的造型方法。
· AEC Extended(AEC扩展):用于建筑、工程以及土地构建方面对象的创建。如树木、栏杆和墙壁等。
· Dynamics Objects(动力学对象):用于创建具有动力学属性的物体。
· Stairs(楼梯):用于楼梯对象的创建,有4种可选择的楼梯类型。
· Doors(房门):用户房门的创建。有3种类型可供选择。
· Windows(窗户):创建窗户对象,有6种窗户类型。
在3ds max 6中,提供了10种标准几何体,分别为Box(立方体)、Sphere(球体)、Cylinder(柱体)、Torus(圆环)、Teapot(茶壶)、Cone(锥体)、GeoSphere(几何球体)、Tube(管状体)、Pyramid(四棱锥)和Plane(平面),如下图所示。
 顶点(vertexs) 图元(primitives) 片元(fragments,又叫片断) 像素(pixels)

阶段1. ?顶点 ->图元

    几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。


阶段2.? 图元? ->片元

    图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。

1) 裁剪

    在裁剪时点,线段和多边形处理略微不同。对于点,要么保留原始状态(在裁剪体内部),要么被裁掉(在裁剪体外部)。对于线段和多边形来说,如果部分在裁剪体外部,则需要在裁剪点生成新的几何顶点。对于多边形,还需要在新增的顶点间增加完整的边。不论裁剪了线段还是多边形,都需要给新增几何点赋予边界标志、法线、颜色和纹理坐标信息。

裁剪过程时两步:

   a 应用程序指定裁剪(Application-specific clipping),一旦组合图元完成后,如果在程序中用glClipPlane()函数定义了任意的裁剪面,就进行裁剪。

   b 视景体裁剪(View volume clipping),随后,图元被投影矩阵投影(进入裁剪坐标系),被相应的视景体裁剪。投影矩阵可以由glFrustum() 或者glOrtho()定义,投影矩阵的操作和上面其他矩阵变换的操作相同。

2) 转换到窗口坐标

    坐标在转换为窗口坐标之前,要除以规格化设备坐标(normalized device coordinates)的w值进行规范化。然后对这些规范化数据进行视口变换(viewport)计算生成窗口坐标。可以用glDepthRange()和glViewport()控制视口大小,决定屏幕上显示图象的区域。

3) 光栅化

    光栅化是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元(fragment)。(yuyu注:这就是片元和像素之间的关键区别,虽然两者的直观印象都是的像素,但是片元比像素多了许多信息,在光栅化中纹理映射之后图元信息转化为了像素)在这个阶段,对象素绘制和位图进行操作需要用到当前栅格位置(用glRasterPos*()定义)。正如上面讨论的,三种图元的光栅化方法是不同的,另外,象素块和位图也需要光栅化。

   a)图元

    采用glPointSize(), glLineWidth(), glLineStipple()和 glPolygonStipple()函数可以选择图元的光栅化维数和模式。另外,还可以用glCullFace(), glFrontFace()和glPolygonMode()控制多边形正反面不同的光栅化效果。

   b)象素

    有几个函数实现象素保存和转换。函数glPixelStore*()用于内存中的象素是如何保存的。glPixelTransfer*() and glPixelMap*()用于象素在写入帧缓冲区前是如何处理的。glDrawPixels()定义了一个象素矩形。用glPixelZoom()实现象素的缩放。

   c)位图

    位图是具有特定片元模式的0和1的矩形。每个片元有相同的相关数据。可以用glBitmap()定义。

   d)纹理存储

    纹理贴图是将指定的部分纹理图象映射到每个图元上。每个片元(fragment)具有的纹理坐标属性,该坐标与纹理图象坐标对应,得到纹理图象该位置的颜色值来修改片元的RGBA颜色,从而完成这个映射过程。用glTexImage2D()或glTexImage1D()来定义纹理图象。glTexParameter*()和glTexEnv*()来控制纹理如何解释和应用到一个片元上。

   e)雾

    已经光栅化的片元具有纹理贴图修正后颜色,可以采用融合因子再融合雾颜色,该融合因子大小根据视点和片元间的距离来定。用glFog*()指定雾化颜色和融合因子。


 

阶段3.? 片元->像素?

    OpenGL允许光栅化生成一个片元,只要该片元通过一系列检测就可以修改帧缓冲区中对应象素。如果它通过测试,片元数据可以直接替换帧缓冲区中的已有值,或者和已有值合并,这取决于设置的模式。

    1)象素所有权(ownership)检测

    第一个测试是判断在帧缓冲区中的象素所对应的某个片元是否属于当前OpenGL上下文。如果属于,片元进行下一个测试。如果不属于,窗口系统决定是否忽略该片元,或者是否进行下一步片元操作。

    2)裁剪检测

    用glScissor()函数,可以定义一个任意屏幕校准矩形,在该矩形外的片元将被忽略。

    3)Alpha检测

    Alpha测试只能在RGBA模式下进行,如果片元的alpha值超出一个固定参照值,片元将被忽略,这个比较函数可以用glAlphaFunc()实现并设定参考值。

    4)模版检测

    当模版缓冲区的值超出一个参照值,模版测试将有条件的忽略该片元。这个比较函数和固定值可以用glStencilFunc()实现。不论图元通过或没有通过模版测试,模版缓冲区中的值会根据glStencilOp()函数进行修改。

    5)深度检测

    当深度缓冲区的值与参照值的比较失败,深度测试忽略该片元。GlDepthFuc()用来执行这个比较命令。如果模版启用,深度比较的结果会影响模版缓冲区值的更新。

    6)融合

    融合合并了一个片元R、G、B和A值和存储在帧缓冲区对应位置的这些值。融合只能在RGBA模式下实现,它的实现需要片元的alpha值和对应当前存储象素,还需要RGB值。用glBendFun()控制,可以修改融合因子的源和目标。

    7)抖动

    如果启动抖动,片元的颜色或者颜色索引采用抖动算法。这个算法只需要片元的颜色值和它的x和y坐标。

    8)逻辑操作

    最后,在片元和帧缓冲区对应值之间要进行一个逻辑操作,结果将替换当前帧缓冲区的值。用glLogicOp定义想要的逻辑操作。这个逻辑操作只能在颜色索引模式下运行,而不能在RGBA模式运行。


象素

   在OpenGL流水线的上个阶段,片元转换为帧缓冲区中的象素。帧缓冲区实际上是一组逻辑缓冲区——包括颜色缓冲区、深度缓冲区、模版缓冲区和累积缓冲区。颜色缓冲区包括左、前右、后左、后右和一些辅助缓存值(auxiliary buffers)。可以直接从中读取或者复制。对于OpenGL不同上下文,这些缓冲区可能不全

    1)帧缓冲区操作

    用glDrawBuffer为绘图选择一个颜色缓冲区。另外在预片元化(per-fragment)操作后,可以用四个不同函数保留写入这些逻辑缓冲区的操作,glIndexMask(), glColorMask(), glDepthMask(), and glStencilMask()。glAccum()对累积缓冲区进行操作。最后glClearColor(), glClearIndex(), glClearDepth(), glClearStencil()和glClearAccum().对不同缓冲区中指定相对应的颜色值、颜色索引值、深度值、模板值和累积值。

    2)读取和复制象素

    用glReadPixel()从帧缓冲区中把象素读到内存中,进行各种操作,保存处理结果。另外,可以用glCopyPixel()从帧缓冲区中复制一块象素到另一个帧混存。glReadBuffer()可以读取和复制颜色缓冲区中的象素。


Python中的3D绘图命令~这还不放到论文或PPT里? 不得不说这真的很漂亮~ 阅读详情

相关推荐

C++ 3D 绘图技术调研常用库介绍

C++ 3D 绘图技术调研常用库介绍

CK的博客 1万+

OpenGL版本与扩展

     OpenGL从推出到现在,已经有相当长的一段时间了。其间,OpenGL不断的得到更新。到今天为止,正式的OpenGL已经有九个版本。(1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1)每个OpenGL版本的推出,都增加了一些当时流行的或者迫切需要的新功能。同时,到现在为止,OpenGL是向下兼容的,就是说如果某个功能在一个低版本中存在,则在更高版

wjj0535的专栏 1351

Python中的3D绘图命令~放到论文或PPT里太加分了

导语 很多情况下,为了能够观察到数据之间的内部的关系,可以使用绘图来更好的显示规律。 比如在下面的几张动图中,使用matplotlib中的三维显示命令,使得我们可以对于logistic回归网络的性能与相关参数有了更好的理解。 下面的动图显示了在训练网络时,不同的学习速率对于算法收敛之间的影响。 下面给出了绘制这些动态曲线的相关的python指令: ➤01 3D plot 1.基本语法 在安装matplotlib之后,自动安装有 mpl_toolkits.mplot3d。 #

L010409的博客 1万+

opengl入门8

OpenGL入门学习[十三] 前一段时间里,论坛有位朋友问什么是状态机。按我的理解,状态机就是一种存在于理论中的机器,它具有以下的特点: 1. 它有记忆的能力,能够记住自己当前的状态。 2. 它可以接收输入,根据输入的内容和自己的状态,修改自己的状态,并且可以得到输出。 3. 当它进入某个特殊的状态(停机状态)的时候,它不再接收输入,停止工作。 理论说

xp5xp6的博客 694

【Qt OpenGL】Qt Creator中的3D绘图及动画教程

刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用OpenGL进行绘图渲染。虽然里面还是由不少专业的解释照搬原文的,但还是加入了大量自己的分析。而且Qt中写OpenGL框架上比VC简单太多了,有不少东西都封装优化好了,代码上还是由有很多区别的。当然,其中原教程没解释好的问题我都作了深入的解释,以及一些多余部分解释、代码都被我删掉简化了。

cly116的博客 3万+

python 3d绘图_Python中的3D绘图命令

很多情况下,为了能够观察到数据之间的内部的关系,可以使用绘图来更好的显示规律。比如在下面的几张动图中,使用matplotlib中的三维显示命令,使得我们可以对于logistic回归网络的性能与相关参数有了更好的理解。下面的动图显示了在训练网络时,不同的学习速率对于算法收敛之间的影响。下面给出了绘制这些动态曲线的相关的python指令:➤01 3D plot1.基本语法在安装matplot...

weixin_39694838的博客 2142

学习OpenGL-ES: - 3D绘图原理

1,成像模型 计算机图形的生成,总是可以抽象成三个过程:输入数据 -> 处理数据 -> 输出人眼识别的图像。 其中最后一个过程,在之前的文章:学习OpenGL-ES: 1 - 像素、颜色、显存、初始化中已经有过比较详细的描述,最终输出的是像素(颜色)点阵,由硬件激发显示屏,发射出相应颜色的光线,被人眼接受,形成图像视觉。所以OpenGL ES 的绘图过程可描述为:输入数据 -> 处理数据 -> 输出像素点阵。 那么,输入数据和处理数据又是怎样的呢? 很自然的可以想到通过...

974

Android实现3D图像显示源代码

部分源代码:   mEgl = (EGL10) EGLContext.getEGL(); mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); int[] version = new int[2]; mEgl.eglInitialize(mEglDisplay, version); EGLConfig[] configs = new EGLConfig[1]; int[] num_confi

3D图形原理和一些基本概念

这篇或者接下来的一系列文章都是我阅读《OpenGL超级宝典》第五版后的个人总结。 第一,2D与3D有什么关系。 2D就是我们平常在纸上画矩形之类的,他们只有宽度和高度。而3D比2D多一个深度。真实世界中,由于我们的双眼的存在,看到的是3D世界。即使你遮住一只眼,由于光线照射产生的表面着色和近大远小的缘由,这些效果激发了我们大脑的记忆,这使得我们观察到的仍是3D世界。 那对于在屏...

积累点滴,保持自我 5301

GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度

GPU架构经历了从专用计算模块到统一可编程处理器的演进。传统GPU面临专用电路配比难题,Nvidia Tesla架构通过引入可编程多线程处理器实现图形与计算的统一。Fermi架构进一步向计算倾斜,随后的架构陆续加入Tensor Core等专用单元。AI时代促成了从图形处理主导向AI计算的转变,形成了Scalar+Vector+Tensor的混合计算范式。SIMT调度重要性降低,CUDA面临新挑战,RISC-V等架构可能带来新机遇。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 915

大模型越狱指令数据集全解析:从AdvBench到HarmBench

本文全面解析了AdvBench、HarmBench等主流大模型越狱指令数据集。AdvBench作为基础测试集,用于快速评估模型安全基线;HarmBench则以其全面的文本、多模态及对抗性攻击评估,成为当前权威的深度安全审计工具。文章还介绍了MaliciousInstruct、JailbreakBench等特色数据集,并提供了根据实际场景选择与使用这些数据集的具体实战指南。

weixin_29327525的博客 616

二分查找通用模板全解析:告别死循环与差一错误

二分查找是一种基于有序数据结构的经典搜索算法,其核心原理是通过不断将搜索区间对半分割,实现对数级的时间复杂度。该技术价值在于能以O(log n)的高效性能处理大规模数据查询,是算法优化和工程实践中不可或缺的基础工具。其应用场景广泛,从简单的有序数组查找,到复杂的边界定位、答案搜索(如“二分答案”问题)乃至动态规划优化(如LIS的二分优化)均有涉及。本文深入探讨的二分查找通用模板,正是为了解决实践中常见的边界条件混淆和“差一错误”等痛点,通过清晰的“左闭右开”区间定义和“红蓝分区”思想,帮助开发者稳定实现各类

weixin_34015336的博客 474

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 882

探索3D科研绘图:从学术图表入门到精通

探索3D科研绘图:从学术图表入门到精通,感谢大家的支持!!!

hacker707的博客 1万+

从ViT到Swin Transformer:一文搞懂Transformer在CV中的进化史(附实战代码)

本文系统梳理了Transformer在计算机视觉领域的演进历程,从开创性的Vision Transformer(ViT)引入全局注意力机制,到DETR实现端到端目标检测,再到里程碑式的Swin Transformer通过滑动窗口和层次化设计高效桥接CNN与ViT。文章深入剖析了各模型的核心思想、技术突破与实战应用,并提供了可运行的代码示例,帮助读者从理论到实践全面掌握这一关键技术脉络。

cola5的博客 713

2025反爬虫革命:京东商品接口的动态指纹认证与量子加密传输方案

在2025年,全球电商API接口面临的安全威胁呈现指数级增长:京东构建了基于硬件、软件、行为三重维度的设备指纹模型:京东构建了基于BB84+E91混合协议的量子密钥中继网络:

FB13713612741的博客 1648

QT—3D绘图

使用OpenGL绘制图形介绍 着色器 例子QOpenGLWidget中使用OpenGL绘制图形 绘制多边形 使用顶点数组 使用缓存 绘制彩色3D图形1为图形设置顶点颜色2.实现3D效果 纹理贴图

Half-up的博客 1万+

2024年捡垃圾指南:E5 V3/V4服务器CPU怎么选?从游戏多开到深度学习,附华南X99主板搭配清单

本文详细解析2024年E5 V3/V4服务器CPU的选购策略,涵盖游戏多开、深度学习等多种应用场景。通过对比E5 V3与V4系列的制程、功耗及性能差异,提供高性价比的CPU型号推荐及华南X99主板搭配方案,帮助用户在有限预算下打造高效能工作站。

weixin_42549451的博客 1577

matploylib的使用之动态绘图和3D绘图

文章目录matploylib的使用之动态绘图和3D绘图1.动态绘图2.3D绘图 matploylib的使用之动态绘图和3D绘图 matploylib是一种非常好用的绘图,建模工具。本文将延伸matploylib中的一些小应用。 利用animation进行动态绘图 利用mpl_toolkits.mplot3d进行3D绘图 1.动态绘图 大部分的动态绘图基于两个步骤 图像的初始化 图像的更新 ...

qq_45603919的博客 5544

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 515

YOLOv11改进 | 主干/Backbone篇 | 利用RT-DETR主干网络PPHGNetV2助力yolov11有效涨点(轻量化目标检测网络)

本文给大家带来利用RT-DETR模型主干HGNet去替换YOLOv11的主干,RT-DETR是今年由百度推出的第一款实时的ViT模型,其在实时检测的领域上号称是打败了YOLO系列,其利用两个主干一个是HGNet一个是ResNet,其中HGNet就是我们今天来讲解的网络结构模型,这个网络结构目前还没有推出论文,所以其理论知识在网络上也是非常的少,我也是根据网络结构图进行了分析(精度mAP提高0.05)。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备​目录一、本文介绍。

Snu77的博客 3719

WPF入门到跪下 第十三章 3D绘图 - 3D绘图基础

四大要点WPF中的3D绘图涉及4个要点:要展示3D内容,首先需要一个容器来装载3D内容。在WPF中,这个容器就是(3D视口),它继承自,因此可以像其他元素那样在XAML中使用。与其他元素相比较,仅增多了两个属性:和。此外,还有一个值得注意的属性,,这个属性在使用上与其他元素没什么区别,只是如果在渲染复杂且频繁更新的3D场景中置为,可以很好地提升性能。视口能够注入所有继承自类的3D对象。但是如果我们要在WPF中通过XAML或者代码去创建可用的3D对象,其复杂程度是难以想象的,而WPF的原生库中也没有提供3D形

SchuylerEX的博客 3097

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android绘制过程3d图形,Android 3D绘图开发简介

3D图像的绘制使用的是 OpenGL ES,所以我们先介绍 OpenGL ES。OpenGL 是一组跨平台的 3D 图像处理 API,OpenGL ES 是 OpenGL 的嵌入式版本,Android 系统从 Android 1.0 开始支持 OpenGL ES 1.0 和 1.1,自 Android 2.2(API Level 8)开始,Android 框架开始支持 OpenGL 2.0 API...

weixin_34246971的博客 4633

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python可视化——3D绘图解决方案pyecharts、matplotlib、openpyxl

这篇博客将介绍python中可视化比较棒的3D绘图包,pyecharts、matplotlib、openpyxl。支持2D/3D散点图、2D/3D条形图、2D/3D折线图、2D/3D饼图、2D/3D地图、热力图、图表、股票图、雷达图、箱线图、树图、树map图、日晷图、平行线图、桑葚图、漏斗图、仪表盘图、画报图、主题河流图、日历图、个性化图,也支持局部放大、数据集、拖动、富文本图;也支持点、线、流图。

qq_40985985的博客 8896

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

mfc 3d绘图_使用SwiftUI进行3D绘图

mfc 3d绘图A few weeks ago, I wrote an article in which I explored the advanced 3D view modifier for rotating objects in SwiftUI. It was well received and I thought I would do a short follow-up to explor...

weixin_26638123的博客 689
上一篇: SVN使用方法
下一篇: 使用CSS+DIV的优点
O3D_tech
博客等级 码龄17年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值