这是用户在 2025-4-6 22:40 为 https://app.immersivetranslate.com/html/ 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?

CG week5.2.1 2025.04.01 Tue PM 1:04 ・ 48Minutes 19seconds ZHANG YIWEN
CG 第 5.2.1 周 2025.04.01 周二 下午 1:04 ・ 48 分钟 19 秒 张艺文

Attendees 1 00:00 지난주에는 5장 5장의 제목이 뭐였나요? 기하 변언이었죠. 기하 하면 그래서 5장에서 트랜스퍼레이션 로테이션 스케일링 밀링 셰어링하는 그런 행렬들에 대해서 공부를 했었고 그다음에 그런 행렬들이 모델 뷰라는 행렬 오픈 지 내부에 있는 모델 뷰 행렬에 적용이 된다고 이야기를 했었어요. 그래서 푸시 메이트릭스 네이트릭스 이런 것들 사용하는 방법 소개를 했었죠. 이번에는 이게 이제 조금 조금 연장선에서 3차원 관측하는 원리 그다음에 이제 3차원 그래픽이 어떻게 3차원 영상이 2D 영상으로 만들어지는지 그러한 원리들을 살펴보는 게 6장에서 이제 7장까지예요. 그래서 동시에 한번 공부를 할 하는 걸로 할게요. 그래서 앞으로는 2D는 이제 그만할 거예요. 2D 그래픽은 끝났어요. 2D 그래픽은 끝나고 오늘부터 보게 되는 거는 3D 그래픽이에요. 3D 그래픽을 공부를 할 거예요.
出席人数 1 00:00 上周我们学习了第 5 章,第 5 章的标题是什么?是几何变换。说到几何,在第 5 章我们学习了平移、旋转、缩放、镜像、剪切等矩阵。然后我们讨论了这些矩阵如何应用于 OpenGL 内部的模型视图矩阵。我们还介绍了如何使用压入矩阵、恢复矩阵等。这次,我们将在此基础上继续学习第 6 章到第 7 章,探讨三维观察的原理,以及三维图形如何转换为二维图像的原理。从现在开始,我们将不再学习二维图形。二维图形已经结束了。从今天开始,我们将学习三维图形。我们将学习三维图形。

Attendees 1 01:08 3gd 그래픽을 공부하기 위해서는 이제 관측 파이프라인이라는 걸 알아야 되는데 관측 파이프라인이라는 거는 3차원 공간에 있는 정점의 좌표가 XY 좌표가 결국은 여러분 윈도우 좌표로 투영이 되죠. 윈도우의 XY 좌표로 투영이 되는데 그게 어떻게 윈도우 좌표로 바뀌게 되는지 그 과정을 우리가 관측 파이프라인이라고 해요. 그래서 그냥 개념적으로 봤을 때는 이렇게 카메라 좌표계가 이렇게 있다고 가정을 할게요. 카메라 좌표기에 우리의 눈이 있다고 생각을 하면 되겠죠. 카메라 좌표에는 빨간색이 x축, 초록색이 y 축, 파란색이 제트 축이라고 하면은 이거 지금 왼손 좌표기예요. 오른손 좌표기예요. x y z가 이 방향으로 돼 있으면은 x하고 y를 이렇게 감쌌을 때 제가 이쪽 축으로 나오죠. 그럼 오른손 잡히게 수가 있는 거예요.
要学习 3D 图形,现在需要了解观测管线,观测管线是指 3D 空间中顶点坐标最终如何投影到窗口的 XY 坐标上。窗口的 XY 坐标是如何转换的,这个过程我们称为观测管线。从概念上来说,假设有这样一个摄像机坐标系。可以想象我们的眼睛在摄像机坐标系中。在摄像机坐标系中,红色是 x 轴,绿色是 y 轴,蓝色是 z 轴,这是一个左手坐标系。如果 x、y、z 是这个方向,当我用 x 和 y 这样环绕时,z 轴会朝这个方向出来,这就是右手坐标系。

Attendees 1 02:09 여기 x 요게 y 그러면 z의 방향이 오른손하고 맞으면은 오른손 잡히게 반대면은 왼손 잡히게 우리가 고등학교 때부터 익히 배웠던 좌표계는 오른손 좌표계예요. 왼손 좌표계예요. 아는 사람 당연히 오른손 잡혀계죠. 고등학교 때 배운 3차원에서 어떻게 했어요? 이쪽이 무슨 축 이쪽이 x 축 이쪽이 y 축 그럼 제트 축은 어디로 올라가요? 위쪽으로 올라가는 게 제트 축이죠. 그리고 x y x y 하면 제 축이 당연히 위로 올라가죠. 그래서 오른손 좌표기고 만약에 z축이 이쪽으로 향한다. 어떤 좌표기가 그럼 이거는 왼손 좌표기를 쓰겠다는 얘기예요. 알겠죠 그런데 이게 x축 y축 z축이 되니까 얘는 오른손 자표기를 지금 사용하고 있다는 거예요. 그래서 맨 처음에 이제 우리 눈이 위치한 뷰 코디네이트 관측 좌표계를 뷰 코디네이트라고 할 거예요.
这里的 x 是这个,y 是那个,如果 z 轴的方向与右手坐标系一致,就是右手坐标系;反之则是左手坐标系。我们从高中开始就熟悉的坐标系是右手坐标系还是左手坐标系?当然是右手坐标系。在高中学习 3D 时是怎么做的?这边是什么轴,这边是 x 轴,这边是 y 轴,那 z 轴在哪里?z 轴是向上的。x 和 y 确定后,z 轴当然是向上的。所以是右手坐标系,如果 z 轴朝向这边,那就是在使用左手坐标系。明白了吗?因为 x 轴、y 轴、z 轴是这样的,所以现在正在使用右手坐标系。所以最初,我们眼睛所在的位置是视图坐标系,我们将其称为视图坐标。

Attendees 1 03:21 그다음에는 여러분이 이제 이 강의실에 있는 강의실에서 사진을 찍는다고 가정을 할게요. 카메라를 가지고 사진을 찍는다고 가정을 하면은 처음에 이제 카메라를 가져오겠죠. 카메라를 딱 가져온 다음에 여기가 뷰 코디네이트가 되는 거예요. 여기가 이제 뷰 코디네이트가 되는 거예요. x y z 그래서 이렇게 보고 있는 거죠. 이렇게 보고 있는 거예요. 그다음에 제일 먼저 해야 될 일이 뭘까 뭔가 이제 기준을 세워야 돼요. 기준을 세워야 되는 게 WC는 뭘까요? WC 월드 코디네이트를 표현한 거예요. 그래서 내가 만약에 사진을 찍는다고 하면은 월드 코디네이트를 여기 강의실에 가장 센터에다가 잡아놓을 수 있겠죠. 센터에다 잡아놓을 수 있고 그래서 월드 코인네이터를 요거 하나를 더 잡아가지고 저희 이제 갖다 놓을 거예요. 그럴 수 있겠죠. 그래서 여기를 그냥 어디를 센터라고 넣을까
接下来,假设你们现在在这个教室里拍照。假设拿着相机拍照,一开始就会拿相机。拿到相机后,这里就成为了视角坐标。这里现在是视角坐标。x、y、z,就是这样看的。就是这样看的。接下来,首先要做的是什么?现在需要建立一个基准。基准是什么?WC 是什么?WC 是表示世界坐标。如果我要拍照,可以将世界坐标放在这个教室的中心。可以放在中心,然后我们将世界坐标放在这里。这样可以吗?所以这里可以放在哪里作为中心

Attendees 1 04:28 잘 놓아지지가 않네.
似乎不太容易放置。

Attendees 1 04:33 여기를 월드컵 네이트로 넣을 수도 있겠죠. 여기를 여기서 이렇게 여기를 보고 있는 거예요. 그런 다음에 그다음에 여러분 카메라 이제 렌즈를 선택을 할 수가 있겠죠? 아니면 관측 공간을 지정을 하는 거예요? 관측 공간 관측 공간을 지정한다는 얘기는 내가 이제 우리 2D 할 때도 2D 할 때도 관측 공간 지정했었죠. 그래서 그 관측 공간 밖에 있는 애들은 아무리 그려도 화면에 안 나왔었죠 3D에서도 마찬가지예요. 단축 공간을 이렇게 지정을 하면은 단축 공간의 형태를 이렇게 절두체 형식으로 지정을 할 수도 있고 아니면은 그냥 직명 벤처 형식으로 지정을 할 수도 있어요. 어떻게 지정하느냐에 따라서 모양 결과가 조금 달라지긴 하는데 아무튼 관측 공간을 지정을 해요. 그다음에 뭐 할까 그다음에 각각의
参会者 1 04:33 我们可以将此处设置为世界杯网络。在这里,我们正在观察这里。然后,你可以选择相机镜头?或者指定观测空间?指定观测空间意味着即使在 2D 时我们也曾指定过观测空间。因此,那些在观测空间之外的对象无法绘制出来。在 3D 中也是如此。你可以以截头锥体形式指定视锥空间,或者以正交投影形式指定。根据指定方式的不同,结果会略有不同,但无论如何都要指定观测空间。然后接下来是什么?接下来是

Attendees 1 05:33 자동차 모델이 디자인된 모델링 코디네이트가 있겠죠. 그다음에 또 사람 모델이 모델링된 모델링 코디네이트가 있을 테고 그래서 월드 코디네이트를 기준으로 이렇게 모델링 코디네이트를 배치시켜요. 모델링 코디네이트가 객체가 하나면은 이제 하나만 배치가 되는 거고 그다음에 여러 개면 이제 여러 개가 배치가 되는 거겠죠. 그다음에 셔터를 탁 누르죠. 사진을 찍으면은 여기 관측 좌표계에서 바라봤을 때 이미지가 이렇게 딱 찍히는 거겠죠. 그다음에 어떻게 해야 돼요? 그다음에 윈도우를 만들죠. 윈도우를 만들고 이 이미지를 어떻게 해줘야 돼요? 윈도우에다 매핑을 하는 거죠. 이거를 우리가 전에 뷰 포트 매핑이라고 했었죠. 전체에 매핑을 할 수도 있고 이만큼 매핑을 할 수도 있고 여기다 매핑을 할 수도 있고 그래서 일련의 과정은 이렇게 된다고 생각을 하면 될 것 같아요. 그래서 결국은 매핑을 하면은 이런 결과가 나오는데 이 결과가 뭐예요?
参会者 1 05:33 有汽车模型的建模坐标,然后还有人体模型的建模坐标。因此,根据世界坐标系来放置建模坐标。如果模型坐标只有一个对象,就放置一个;如果有多个,就放置多个。然后按下快门。拍照时,从这个观测坐标系看,图像就会这样拍摄下来。接下来该怎么办?然后创建窗口。创建窗口后,如何处理这个图像?将其映射到窗口上。我们之前称之为视口映射。可以全部映射,也可以映射部分区域。所以整个过程大概是这样的。最终映射后得到的结果是什么?

Attendees 1 06:40 입력은 3차원 공간의 장면이고 3차원 구간의 장면이고 출력은 출력은 2차원 윈도우의 이미지가 나오는 거죠. 여기에 있는 여기에 요 객체와 요 객체를 구성하는 점들이 있을 거 아니에요? 그렇죠 이 점들 엄청나게 많은 점들로 구성이 돼 있겠죠. 여기도 마찬가지고 근데 걔네들이 결국은 어디로 투약이 다 좌표가 바뀌어야 돼요 2차원 윈도우 상의 좌표로 바뀌어야겠죠. 예를 들면은 이 코너의 위치가 이 코너의 위치가 100콤마 200 콤마 300이었다. 3차원 공간에서는 그럼 얘는 이제 최종적으로 와서는 여기의 위치로 바뀌어야겠죠. 얘는 200 콤마 300 이런 식으로 3차원 공간의 좌표가 어떻게 2차원 스크린 상의 좌표로 바뀌게 되는지 그거를 공부하는 게 관측 파이프라인이에요.
输入是 3D 空间的场景,输出是 2D 窗口的图像。这里有这些对象和组成这些对象的点。这些点会由非常多的点组成。这些点最终都需要转换坐标,变成 2D 窗口上的坐标。例如,某个角落在 3D 空间中的位置是 100,200,300,最终会变成在 2D 屏幕上的 200,300 这样的位置。研究 3D 空间坐标如何转换为 2D 屏幕坐标的过程,就是观测管线。

Attendees 1 07:47 그래서 관측 파이프라인은 아까도 얘기했듯이 3차원 객체의 좌표를 3차원 객체의 좌표를 2차원 윈도우 좌표로 여러분 이미지 좌표 혹은 윈도우 좌표 다 똑같아요. 윈도우 좌표로 변하는 과정이고 내부적으로는 이렇게 크게 세 가지 스텝으로 구성이 돼 있어요. 첫 번째는 모델링 및 관측 변화 이 모델링 및 관측 변화는 우리가 지지난 시간에 배웠던 모델 뷰 행렬이 관장을 해요. 그래서 모델 뷰 행렬에 의해서 모델링 및 관측 변환이 이루어지게 되는 거고 그다음은 투형 변환이에요. 투영 변환 이거는 앞으로 우리가 배우게 될 프로젝션 행렬에 의해서 이루어지게 되는 거고 그다음에 마지막으로 뷰 포트 변환이 있어요. 뷰 포트 변환.
观测管线就是将 3D 对象的坐标转换为 2D 窗口坐标的过程,内部主要分为三个步骤。第一步是建模和观测变换,这由我们之前学过的模型视图矩阵负责。然后是投影变换,这将由我们即将学习的投影矩阵完成,最后是视口变换。

Attendees 1 08:41 그래서 크게 보면 관측 파이프라인은 이렇게 1번, 2번 3번으로 진행이 되는 거고 여기 MC 몇 가지 이제 코디네이 나하고 WC 그다음에 VC 그다음에 PC는 신경 안 써도 되고 NC 그다음에 BC 이렇게 나오는데 c는 다 뭐의 약자인 것 같아요 코디네이트 프레임 앞쪽의 약자겠죠 MC는 뭘까? MC
总的来说,观测管线是这样按 1、2、3 步进行的,这里有几个坐标系的缩写,如 MC、WC、VC、PC、NC、BC 等。这些缩写应该是坐标系框架前面的字母,那么 MC 是什么呢?MC

Attendees 1 09:13 봤더니 모델 좌표계 가장 작은 모델 좌표계 그래서 여러분이 뭔가 모델링을 해요. 만약에 객체를 모델링 나는 휴대폰을 여기다가 모델링을 하고 싶으면은 모델링 좌표계를 기준으로 해서 이제 3차원 객체를 디자인을 하는 거죠. 그게 이제 모델링 코디네이트가 되는 거고 그다음에 WC는 아까 얘기했죠. 월드 코디네이트 그다음 VC는 뭐라고 했어요? VC VC는 카메라가 있는 좌표기라고 했었죠. 뷰 코디네이트 관측 좌표기 그다음에 여기 나오는 NC라는 거는 정규화 좌표계 나중에 설명할 거예요. 그다음에 DC는 디바이스 좌표계 혹은 윈도우 좌표계 이렇게 생각해도 될 것 같아요. 주요한 좌표계는 이렇게 5개가 있고 여기 모델 뷰 메이트릭스가 있고 프로젝션 메이트릭스가 있네요. 오픈 지열에서는 두 개의 매트릭스가 있다고 했죠. 두 개의 매트릭스가 있는데 여기 MC 모델 코디네이트에서 모델 코디네이트에서 표현된 좌표들이 입력으로 이제 들어가게 되는 거예요.
我看到是模型坐标系,最小的模型坐标系。所以当你进行建模时,如果你想对一个对象建模,比如我想在这里建模一个手机,就是以模型坐标系为基准来设计 3D 对象。这就是模型坐标,然后 WC 如刚才所说是世界坐标,VC 是什么?VC 是摄像机所在的坐标系,视图坐标系。然后这里的 NC 是标准化坐标系,稍后会解释。接下来 DC 是设备坐标系或窗口坐标系。主要的坐标系有这 5 个,这里有模型视图矩阵和投影矩阵。在 OpenGL 中有这两个矩阵。这两个矩阵会接收从模型坐标系中表达的坐标作为输入。

Attendees 1 10:25 좌표 우리 명시할 때 어떤 함수 쓰나요? GL 버텍스라는 함수 쓰죠. 0 콤마 0 콤마 형 그다음에 1 콤마 0 콤마 형 0 콤마 1 콤마 0 이 3차원 좌표가 들어가게 되는 거죠. 3차원 좌표가 들어가게 되면은 이 좌표들이 이 좌표들이 어떤 행렬하고 비해질까 모델 뷰 리라고 그렇게 저희가 모델 뷰 류라고 그럼 나온 결과는 중간에 이제 월드 코닝 h 저표로 한 번 변환이 됐다가 최종적으로 카메라 코디네이트에서 표현된 좌표들이 나와요. 모델 뱅이라고 곱해지게 되면은
听众 1 10:25 当我们指定坐标时会使用什么函数?使用 GL 顶点函数。0,0,形式,然后是 1,0,形式,0,1,0 这三个三维坐标。当三维坐标进入时,这些坐标会与哪个矩阵进行比较?模型视图矩阵。得到的结果是经过世界坐标系转换,最终以相机坐标系表示的坐标。当乘以模型变换矩阵时

Attendees 1 11:07 얘가 내 눈앞에 붙어 있는 카메라 코디네이트고 그다음에 이게 월드 코디 이게 모델 코디네이트라고 가정을 할게요. 그러면 모델 비행률은 여기서 어떤 변환일까? 모델 비행률은 여기서 이쪽으로 가는 변환이에요. 이 좌표계가 이 좌표계로 가는 변환이 모델 유행률이에요. 그러면 이 좌표계에다가 어떤 점들을 지정을 하는 거예요? 0 콤마 0 콤마 형은 어디일까? 중점이 되겠죠. 원점 그다음에 1 콤마 0 콤마 0 하면 x축으로 그다음에 0 컴 컴 형 하면 y 축이죠. 그 삼각형 3개 세 점의 좌표를 넣은 거예요. 그러면 이 세 점의 좌표가 뭐가 곱해지나 모델 벽이라고 곱해주셨죠? 모델 백률은 어디서 어디로의 변환이라고 했어요? 내 눈에서 이 모델링 코디네이터로의 변환이라고 했었죠. 여기서 여기로 변환한 다음에 이 점을 곱하면은 나온 결과는 뭘까 우리 지지난주에 배웠죠.
听众 1 11:07 这是在我眼前的相机坐标系,然后这是世界坐标系,假设这是模型坐标系。那么模型变换矩阵在这里是什么变换?模型变换矩阵是从这里到那里的变换。这个坐标系到那个坐标系的变换就是模型变换矩阵。那么在这个坐标系中指定哪些点?0,0,形式在哪里?那就是中心点,原点。然后 1,0,0 是 x 轴,0,1,0 是 y 轴。这是三角形的三个点的坐标。那么这三个点的坐标会乘以什么?模型变换矩阵。模型变换矩阵是从哪里到哪里的变换?是从我的视角到模型坐标系的变换。从这里转换到那里后,乘以这个点,得到的结果是什么?我们上周已经学过了。

Attendees 1 12:10 이전 코디네이트에서 좌표가 나온다고 했었죠. 변환 행렬이 여기서 일로 가는 거고 그 변환 행렬에다가 얘네들을 곱해 주는 거예요. 그다음에 이전 코디네이트가 뭔가 카메라 코디네이트죠 뷰 코디네이트 그래서 모델 코디네이트에서 좌표들이 모델 비행률하고 곱해지게 되면 나온 결과는 카메라 코디네이트 즉 뷰 코디네이트에서의 좌표가 계산이 되는 거예요. 그래서 이 뷰 코니네이트에서 저표가 다시 이제 프로젝션 행렬하고 곱해지게 되면은 나중에 배우겠지만 노멀라이즈 코디네이트 정규화 좌표계의 좌표가 계산이 돼요. 그다음에 이게 뷰 포트 변환을 통하면은 디바이스 코디네이트 즉 윈도우 코디네이트로의 좌표가 계산이 되는 거예요. 그래서 이런 과정들에 대해서 1년에 이제 관측 파이프라인이라고 하고 이거를 배울 거예요. 일단 모델 뷰 행렬에 첫 번째가 이제 모델링과 뷰잉을 두 개를 동시에 하는 행렬이 모델 뷰 행렬인데 뷰인 변함부터 한번 살펴볼게요.
出席者 1 12:10 之前提到坐标是从坐标系获得的。变换矩阵是从这里到那里的,并且我们将这些矩阵相乘。然后,之前的坐标是相机坐标,即视图坐标。因此,当模型坐标中的坐标与模型矩阵相乘时,得到的结果是相机坐标,即视图坐标中的坐标。所以,当这些视图坐标又与投影矩阵相乘时,稍后我们将学习,会得到规范化坐标系中的坐标。然后,通过视口变换,坐标将被计算为设备坐标,即窗口坐标。这些过程被称为观测管线,我们将学习这个。首先,模型视图矩阵是同时进行建模和视图变换的矩阵,我们将首先查看视图变换。

Attendees 1 13:21 이게 무슨 코디네이트예요? 뷰 코디네이트죠 우리 카메라 코디네이트 하고 처음에는 월드 코디네이트하고 같은 위치에 있어요. 같은 위치에 있는 거고 관측 변환이라는 거는 이 뷰 코디네이트에서 월드 코디네이트로 좌표계가 변환하는 거예요.
出席者 1 13:21 这是什么坐标?视图坐标,我们的相机坐标,起初与世界坐标处于同一位置。观测变换是指从视图坐标到世界坐标的坐标系转换。

Attendees 1 13:46 뷰 코디네이트하고 월드 코디네이트하고 처음에 같이 있다고 했었죠. 같이 있는 상태에서 내가 월드 코디네이트를 뒤로 쭉 빼거나 이렇게 이게 관측 변환이에요. 여기 있으면은 안 보이죠. 눈앞에 있으면은 좀 뒤로 쭉 빼주는 거예요. 내가 바라볼 수 있도록 바라볼 수 있도록 빼주는 거고 그거는 여기 랜더 함수 보면은 여기 셋업 뷰 볼륨이라는 거는 관측 공간을 지정하는 거예요. 관측 공간을 지정해서 프로젝션 행렬하고 관련이 있어서 나중에 할 거예요. 나중에 할 거고 셋업 셋업 뷰 트랜스폼, 뷰 트랜스폼 한테 보면은 현재 행렬을 뭐로 선택을 해요? 현재 행렬을 모델 행렬로 선택을 하죠. 모델 뷰 행렬로 선택을 하고 그 모델 행렬을 뭘로 초기화해요? 단위 행렬로 초기화하죠. 그러면은 모델 변경이 처음에 4 바이 4 단위 행렬로 되겠죠. 그다음에 GL 트랜슬레이트 00 마이너스 10 해줬어요. 이거 어떤 변환인가?
与会者 1 13:46 视图坐标和世界坐标起初是在一起的。在这种状态下,如果我将世界坐标向后推,这就是观测变换。如果在这里,就看不见。如果在眼前,就要向后推一下。为了让我能够观望,能够观望而推开,这可以从渲染函数中的设置视图体积中看出,这是指定观测空间。它与投影矩阵有关,我们稍后会讨论。接下来,在视图变换中,当前矩阵如何选择?选择模型矩阵,选择模型视图矩阵,并用单位矩阵初始化。那么模型变换最初将是 4x4 单位矩阵。然后执行 GL 平移 00 负 10。这是什么变换?

Attendees 1 14:53 이거 x y z z 축으로 마이너스 10만큼 빼는 변환이죠. 그럼 처음에 같이 있다가 같이 있다가 단위 행렬이면 같이 있는 거예요. 그냥 단위 행렬일 때는 뷰 코디네이트하고 월드 코디네이트하고 같이 있는 상태에서 00 마이너스 10 하면은 이게 파란색이 제트 방향이에요. 이게 x 방향 이게 y 방향 이게 제 방향 어떻게 어느 쪽으로 쭉 빼는 건가 뒤로 쭉 빠지는 거죠. 뒤로 쭉 빠지는 거예요. 그래서 모델 비행률이 지금 이런 결과를 얻게 되는 거예요. 이런 결과 뒤로 쭉 빠진 상태가 되는 거예요. 그럼 이 모델 행렬은 하나의 프레임을 정의한다고 했었죠 좌표계 어떤 좌표계 이 좌표계를 정의하는 거야 이 좌표에 됐나요? 여기서 쭉 뒤로 뺀 거예요. 이게 월드 관측 변환 그래서 하나 빼면은 이렇게 되겠죠. 이렇게 뷰 코니네이트는 그대로 있고 월드 코니에이트가 뒤로 이 제트 방향으로 뒤로 쭉 밀려나 있는 상태 여기 이해되나요? 그다음에 밑에서 뭐 하나 볼까요?
与会者 1 14:53 这是在 x、y、z 轴上减去 10 的变换。起初它们是在一起的,当是单位矩阵时就是在一起。在单位矩阵时,视图坐标和世界坐标是在一起的状态,当执行 00 负 10 时,这里蓝色是 Z 方向,这是 X 方向,这是 Y 方向,这是 Z 方向,向哪个方向推?是向后推。所以模型视图现在获得这个结果。结果是向后推。那么这个模型矩阵定义了一个坐标系,定义了哪个坐标系?在这里向后推。这是世界观测变换。如果减去一个,就会变成这样。视图坐标保持不变,世界坐标在 Z 方向向后推。你理解了吗?接下来我们看下一个。

Attendees 1 16:07 여기 푸시 메이트릭스 안에요. 그럼 뭘 저장하는 거예요? 푸시 메이트릭스는 현재 어떤 행렬을 저장하는 거예요? 이 상태를 저장하는 거죠. 이 상태를 저장을 하고 여기서 GL 트랜슬레이트 f 이동을 시키겠다는 얘기예요. 뭐를 이 콤마 2 콤마 0으로 그러면은
出席者 1 16:07 这里是推送矩阵。那么它保存的是什么?推送矩阵是保存当前什么矩阵?这是在保存状态。保存这个状态,然后在这里使用 GL 平移 f 进行移动。那么这个逗号 2,逗号 0 是什么?

Attendees 1 16:31 여기 월드 코디네이트가 있는 거고 이 상태를 한번 저장을 했어요. 저장을 했다가 어디로 x축으로 이만큼 y축으로 이만큼 그러면 현재 모델 백렬은 어디에 있는 거예요? 여기 있는 거죠 여기 있게 되는 거예요. 그다음에 여기 드로우 오브젝트 해가지고 삼각형을 하나 그렸어요. 삼각형을 삼각형을 하나 그리면은 어떤 삼각형을 그렸나 봤더니 0 컵마형 마형 여기가 월드 코디네이트고 이게 모델링 코디네이트가 되는 거죠. 0 콤마 0 콤마 형 하면 이 점이네요. 모델링 코디네이트에서 그다음에 2 콤마 0 콤마 0 하면 이 점이고 그다음에 1 콤마 2 콤마 0 하면 이 점이겠죠. 점점 이 점은 요 점 요 점 요 점은 모델링 코디네이트에서 표현된 점이죠.
出席者 1 16:31 这里是世界坐标,然后保存了这个状态。保存之后,如果在 x 轴上移动这么多,y 轴上移动这么多,那么当前的模型矩阵在哪里?它就在这里,就在这里。然后在这里绘制对象,画了一个三角形。画一个三角形,观察画的是什么三角形,发现是 0 逗号 0 逗号某个形状,这里是世界坐标,这就成为了建模坐标。0 逗号 0 逗号某个形状,这是这个点。在建模坐标中,然后 2 逗号 0 逗号 0 是这个点,接着 1 逗号 2 逗号 0 是这个点。这些点,这个点,这个点,这个点都是在建模坐标中表示的。

Attendees 1 17:21 이게 월드 코디네이트 그다음에 모델링 코디네이트는 x축으로 y축으로 이만큼 움직이고 그다음에 좌표는 어디서 지정된 애들이에요 여기서 지정된 애들이죠. 현재 모델 대행렬은 뭐였을까 그러면은 여기서 트랜슬레이트 2 2 2 하면은 아까 뒤로 10만큼 뺀 거죠. 그다음에 이만큼 움직이면은 현재 모델 행렬은 얘가 되는 거죠. 이 행렬은 어디서 어디로 향하는 변화일까요? 내 눈에서 내 눈에서 월드로 갔다가 월드에서 모델링 코네이트로 가는 변환이죠. 그럼 결국 어디서 어디로 향하는 변환이에요? 내 눈에서 모델링 코디네이트로 바뀌는 변환이죠. 거기에다가 어떤 점들을 곱하는 거예요? 퍼텍스 해가지고 3점을 곱하면은 여기 이제 예로 나와 있는 게 1 2 0이니까 어떤 점을 곱한 거예요? p2라는 점을 곱한 거죠. 그럼 나온 결과가 3 5 마이너스 10이 나온대요 3 5 마이너스 10 이거의 의미는 뭘까?
参会者 1 17:21 这是世界坐标,接下来是建模坐标,在 x 轴和 y 轴上移动这么多,然后坐标是在哪里指定的?在这里指定的。那么当前的模型矩阵是什么?如果在这里平移 2 2 2,那就是之前向后移动了 10。接下来移动这么多,那么当前的模型矩阵就是这个。这个矩阵是从哪里到哪里的变换呢?是从我的眼睛到世界,然后从世界到建模坐标的变换。那么最终是从哪里到哪里的变换呢?是从我的眼睛到建模坐标的变换。在这上面乘以什么点?顶点,乘以 3 个点,比如现在举例的是 1 2 0,所以乘以了什么点?乘以了 p2 点。那么得到的结果是 3 5 负 10,3 5 负 10 的意义是什么?

Attendees 1 18:20 3 5 마이너스 10의 의미는 3 5 마이너스 7의 의미는 내 뷰 코디네이트에서 바라본 얘네들의 좌표가 되는 거죠. 왜 모델 행렬 자체가 변환으로 보면은 내 눈에서 이쪽 지금 모델 코디네이터로의 변환이고 그다음에 이 좌표들은 어떤 좌표들이에요? 여기서 표현된 좌표들이죠. 여기서 표현된 좌표를 곱하면은 우리 지난 간 시간에 설명한 게 뭐예요? 이전 좌표계에서 표현된 좌표가 나온다고 했죠. 요 3 5 마이너스 10은 정말 보면 여기서 봤을 때 이 점은 어디예요? x축으로 x축으로 여기서 이만큼 움직였죠. 근데 여기서 1이니까 3 y축으로는 왜 o가 될까? 이게 아까 y축으로 이만큼 움직였었죠. 이만큼 움직인 다음에
参会者 1 18:20 3 5 负 10 的意义,或者说 3 5 负 7 的意义是,这是从我的视图坐标看到的它们的坐标。为什么模型矩阵本身从变换来看是从我的眼睛到现在的模型坐标,那么这些坐标是什么坐标?是在这里表示的坐标。如果用这里表示的坐标相乘,那么我们之前解释的是什么?是得到了在前一个坐标系中表示的坐标。这个 3 5 负 10,如果仔细看,这个点在哪里?在 x 轴上移动了这么多。但是这里是 1,为什么 y 轴会是 0?这是因为之前在 y 轴上已经移动了这么多。在移动了这么多之后

Attendees 1 19:18 5가 아니라 4가 돼야 되는 거죠. 원래 4가 돼야 되네요. 얘 입장에서 봤을 때 얘는 4가 되는 거고 y축이 그다음에 z 축은 마이너스 10이래요. 왜 마이너스 10인가 마이너스 10면 뒤로 뺐으니까 그렇죠 이 점만 곱하나 아니죠 어떤 점을 곱해요? 다 p제로도 곱해야 되고 p 제로는 000 1 넣으면 되고, p1은 200 1 넣으면 되겠죠. p2는 1 2 0 1 넣으면 되고 다 누구하고 곱해지는 거예요? 현재 모델링이라고 곱해지는 거죠 그럼 나온 결과는 다 뭐예요? 카메라 코디네이트 관측 좌표계에서 표현된 이런 점들에 이제 좌표가 나오는 거예요. 드로 오브젝트 한 다음에 GL 팜 메이트릭스 하네요. 그럼 어디로 복귀해요? 월드 코디네이트로 또 복귀를 하죠. 이 상황에서 나는 또 다른 객체를 그릴 거야 하면은 이 월드 코디네이트 기준으로 해서 또 다른 데로 이동했다가 여기서 또 버텍스를 지정을 해 주는 거예요.
出席者 1 19:18 不应该是 5,而应该是 4。原本就应该是 4。从他的角度来看,对他来说是 4,y 轴在接下来,z 轴是负 10。为什么是负 10?因为负 10 意味着往后移动。这一点是乘以一个还是不止?你要乘以哪些点?都要乘以 p 零,p 零是输入 000 1,p1 是输入 200 1,p2 是输入 1 2 0 1,它们都要与什么相乘?与当前建模相乘。那么得到的结果是什么?在相机坐标系(观测坐标系)中表示的这些点的坐标。绘制对象后,进行 GL 棕色矩阵。然后回到哪里?又回到世界坐标。在这种情况下,如果我想绘制另一个对象,就会基于这个世界坐标移动到另一个地方,然后在那里指定顶点。

Attendees 1 20:25 그럼 그 버텍스 좌표를 지정하는 순간 모델 병렬로 곱해지겠죠 곱해지게 되면 결국 결과는 뭔가 내 카메라 코이네이트에서 바라본 내 눈에서 바라본 좌표들이 계산된다는 얘기예요.
出席者 1 20:25 那么在指定顶点坐标的那一刻,它将与模型并行相乘。一旦相乘,结果就是在我的相机坐标系中,从我的眼睛视角计算出的坐标。

Attendees 1 20:40 그래서 이걸 굳이 나누게 되면은 이쪽이 뷰잉 관측 변환 즉 어디서 어디로의 변환이에요? 카메라에서 월드 코디네이터로의 변환이고 그다음에 이쪽이 뭘까 이쪽이 모델링 변환이죠. 월드 코디네이터에서 객체의 모델 코디네이터로의 변환 근데 두 개를 합치면은 모델링과 뷰잉을 같이 합치면은 그냥 모델 뷰 행렬이 되는 거예요. 이 모델 전이라고 곱해진 버텍스들의 좌표가 곱해지게 되면 결과가 뭐가 나온다? 카메라 코디네이트에서 바라본 이런 점들의 좌표가 나온다. 사실 그것만 이해를 하면은 돼요.
与会者 1 20:40 所以如果非要分开的话,这边是视角观测变换,即从哪里到哪里的变换?从相机到世界坐标系的变换,然后这边是什么呢?这边是建模变换,即从世界坐标系到对象的模型坐标系的变换。但是如果将两者结合起来,将建模和视角一起合并,就会变成模型视图矩阵。当这个模型变换乘以顶点坐标时,结果会是什么?得到的是从相机坐标系视角看到的这些点的坐标。事实上,理解这一点就足够了。

Attendees 1 21:27 그 내용을 다시 한 번 정리를 하면은 모델링 변환은 어디서 어디로의 변환이라고
与会者 1 21:27 如果再梳理一遍这个内容,建模变换是从哪里到哪里的变换

Attendees 1 21:38 모델링 좌표계에서 정의된 좌표를 월드 좌표계의 좌표로 변환하는 게 모델링 변환이고 그다음에 관측 변화는 모델링 변환 끝나면은 월드 코디네이트의 좌표가 나오고 관측 변화는 월드 좌표계에서 정의된 좌표를 관측 좌표계 VC의 좌표로 변환하는 게 관측 변환이에요. 그래서 오픈gl에서는 이 모델링과 관측 변환을 동시에 합쳐서 모델 비행렬이 관리를 하는 거죠. 그래서 결국은 모델링하고 관측을 합치면 어떻게 돼요? 모델 좌표계에서에 표현된 좌표가 모델 비행률과 곱해지게 되면은 관측적 표계의 좌표로 변환이 되는 거죠. 앞에서 얘기했던 거 다시 얘기한 거예요. 그래서 이게 휴인 변환 이게 모델링 변환 그다음에 이게 GL 버텍스로 지정해 주는 좌표들 이 좌표가 이거하고 곱해진다는 건 뭐예요? 이거하고 곱해진다는 거는 모델링 변환을 한다는 얘기죠. 그 결과가 얘하고 곱해진다는 거는 뷰잉 변환을 한다는 얘기예요.
参会者 1 21:38 在建模坐标系中定义的坐标转换为世界坐标系的坐标的过程称为建模变换,然后是观测变换。建模变换结束后,世界坐标系的坐标就出来了,观测变换是将世界坐标系中定义的坐标转换为观测坐标系(VC)的坐标。在 OpenGL 中,这种建模和观测变换是同时进行的,由模型矩阵管理。最终,当建模和观测结合时,模型坐标系中表示的坐标通过模型矩阵相乘,就转换为观测坐标系的坐标。这是之前讨论过的内容。这是人性变换,这是建模变换,接下来是 GL 顶点指定的坐标。这些坐标与之相乘意味着什么?与之相乘意味着进行建模变换。其结果与之相乘则意味着进行观测变换。

Attendees 1 22:46 아까 관측 파이프라인이 파이프라인이 있었는데 이쪽 부분이 끝났어요. 위쪽 부분이 반이 끝난 거예요. 여기 입력으로 들어가는 게 뭐였어요? 이제 모델링 코디네이트에서 표현된 좌표들이 입력으로 들어가죠. 입력으로 들어가게 되면은 모델 비행이라고 곱해져요. 모델 병이라고 곱해지게 되면 나온 결과는 뭐가 나온다고 했어요? 뷰 코디네이트에서 표현된 좌표들이 나온다고 했죠. 이쪽 부분이 끝난 거고 그다음에 우리가 배워야 되는 건 이제 프로젝션 프로젝션 부분인데 일단 이쪽 부분만 끝나도 이제 3차원 관측 프로그램을 만들 수가 있어요. 한번 볼까요? 모델링 앤 뷰잉 변환을 이용해서 3차원 관측 프로그램을 만들 건데 3차원 관측 프로그램이라는 거는 3차원 장면을 임의의 위치와 방향에서 관측할 수 있는 프로그램을 우리가 보통 3D 뷰어라고 하죠. 얘는 아주 심플하게 모델 병렬만 여러분이 잘 조작을 하면은 이게 가능하대요. 그래서 기본으로 제공되는 기능들은 3차원 월드 좌표계를 회전을 시킬 거예요.
参会者 1 22:46 之前的观测管线已经结束。上半部分已经完成了。输入是什么?现在是在建模坐标系中表示的坐标作为输入。输入后,与模型矩阵相乘。当与模型矩阵相乘时,会得到什么结果?我们之前说过,会得到在观测坐标系中表示的坐标。这一部分已经完成,接下来我们需要学习的是投影部分。即使只完成这部分,也已经可以制作 3D 观测程序了。让我们来看看,使用建模和观测变换制作 3D 观测程序,即 3D 观测程序是指可以从任意位置和方向观测 3D 场景的程序,我们通常称之为 3D 查看器。据说只要你很好地操作模型矩阵,这是很容易实现的。基本提供的功能是旋转 3D 世界坐标系。

Attendees 1 24:05 이게 아까 월드 자하기라고 했죠. 내 눈에서 이렇게 뒤로 뺀 다음에 이 월드 좌표기를 이렇게 막 회전을 시킬 거예요. 그러면은 안 보이는 부분이 막 보이기도 하겠죠. 3.5 월드 좌표기를 회전시킬 거고 장면을 이걸 여기서 이거를 내가 앞으로 당기면 어떻게 돼요? 더 커지겠죠. 뒤로 쭉 밀면은 더 작아지겠죠. 그래서 줌인 줌아웃을 할 수 있고 그다음에 이 월드 잡 표를 올드래프를 이쪽으로 이동을 시킬 수도 있겠죠. 이동하면 그게 이제 장면의 이동을 우리가 보통 패닝이라고 해요. 패닝 패닝하는 기능 로테이션 주인 줌아웃 패닝 이게 이제 가장 기본적인 3D 뷰어의 관측 기능이 되겠죠. 그래서 이번 시간에는 이 세 가지를 한번 구현을 해보고 그다음에 내부적인 메커니즘을 잘 이해를 하는 게 목표가 될 것 같아요. 일단 로테이션부터 한번 볼게요. 로테이션 관측 프로그램에서 가장 기본이 되는 로테이션은 아크볼이라는 걸 이용해서 회전을 하게 돼요. 일단 프로그램 먼저 한번 가볼까요?
参会者 1 24:05 这是刚才说的世界坐标系。我会从我的视角往后移动,然后旋转这个世界坐标系。这样,原本不可见的部分就会变得可见。3.5 世界坐标系将进行旋转,如果我将场景向前拉近会发生什么?它会变大。如果向后推远,就会变小。所以我们可以进行放大缩小,然后还可以移动这个世界坐标系。移动时,我们通常称之为平移。平移、旋转、放大缩小,这是 3D 查看器最基本的观察功能。在这节课中,我们的目标是实现这三种功能,并深入理解其内部机制。首先让我们来看看旋转。在观察程序中,最基本的旋转是使用称为"弧球"的方法来进行。我们先来看看这个程序。

Attendees 1 25:18 이 클래스에 올라가 있는
参会者 1 25:18 位于这个类上的

Attendees 1 25:42 프로그램 시작하면 이렇게 되고 왼쪽 마우스 버튼 눌러서 이렇게 움직이면은 뭐 화면이 이렇게 회전이 되죠 3차원 3차원이에요. 얘는 그다음에 스크롤로 밀고 당기면 주민 줌아웃이 되죠. 주민 줌아웃이 되는 거고 그다음에 오른쪽 마우스 버튼으로 이렇게 패닝 패닝까지 가능해요. 이게 이제 기본적인 뭐다? 기본적인 3차원 뷰어 3D 뷰어의 이제 기본적인 기능이 되겠죠. 그래서 이런 것들이 이런 것들이 어려운 게 아니라 뭐만 잘 조작을 하면 돼요. 모델 비행률만 잘 조작을 해 주면은 이게 가능하다는 얘기예요. 모델링과 뷰인 관측 변환만 잘 조작을 해주면은
参与者 1 25:42 程序开始后是这样的,按下左键就可以像这样移动,屏幕就会旋转。这是三维的,三维。然后滚动可以放大缩小,可以放大缩小。接着右键可以进行平移。这是基本的三维查看器 3D 查看器的基本功能。所以这些并不难,只要操作得好。意思是只要很好地操作模型和视图变换就可以实现。

Attendees 1 26:44 그 첫 번째 단계로 아크볼을 이용한 먼저 회전부터 한번 볼게요. 회전은 마우스 좌표를 마우스 좌표를 일단 마이너스 1부터 1 그다음에 마이너스 1부터 1 이러한 정규화된 영역의 좌표로 매핑을 해 줄 거예요. 우리 지난 시간에 배웠죠. 마우스 이벤트 처리하는 함수 등록하는 방법 배웠죠. 마우스 좌표는 어디가 0 컵 모양일까? 좌측 상단이 0 컴마 형이 된다고 했었죠. 그다음에 여기서부터 이쪽이 x 좌표가 되고 여기가 y 좌표가 된다고 했어요. 이거를 뭘로 바꿀 거냐 하면은 이렇게 여기가 마이너스 1 콤마 마이너스 플러스 1로
参与者 1 26:44 首先我们来看使用 arcball 的旋转。旋转首先将鼠标坐标映射到从负 1 到 1 的标准化区域坐标。我们上次学习了注册鼠标事件处理函数的方法。鼠标坐标的 0 点在哪里?左上角是 0 点,坐标就是这样的。然后 x 坐标在这边,y 坐标在这边。我们要把它转换成什么呢?就是这样,这里是负 1,加上正负 1。

Attendees 1 27:35 그다음에 결국은 이렇게 되겠네요. 여기가 마이너스 1 콤마 마이너스 1 그다음에 여기가 플러스 1 콤마 플러스 1 이 좌표로 바꾸겠다는 얘기예요. 뭐를 마우스 좌표를 마우스 좌표를 이렇게 정규화된 좌표로 바꾸겠다는 얘기예요. 이거 어떻게 해주면 될까 아주 간단해요. 어떻게 이렇게 x는 이런 식으로 매핑을 시켜주면 되고 y는 이런 식으로 매핑을 시켜주면 돼요. 이게 정말 그렇게 되는지 한번 볼까요? 잘 안 보이나요?
接下来最终会是这样。这里是负 1,负 1,然后这里是正 1,正 1。这是要将这些坐标转换的意思。就是要将鼠标坐标转换为标准化坐标。这该如何做呢?其实很简单。只需要像这样对 x 进行映射,然后对 y 也进行类似的映射就可以了。我们来看看是否真的是这样?看清楚了吗?

Attendees 1 28:13 x는 제일 작은 값일 때 얼마예요? x는 제일 작은 값일 때 마우스 좌표 0 값이죠. 여기다 0 넣으면 뭐 나오나 0 넣으면 w 분의 마이너스w니까? 마이너스 1 나오죠. x 좌표가 0인 맨 끝에는 다 마이너스 1로 매핑이 되겠죠. 그다음에 x가 가장 큰 값일 때는 얼마가 나와요? 마우스 잡터에서 맨 오른쪽에는 w 값이 나오죠. 그 w 넣으면 뭐가 되나 2w 마이너스 w니까? w 나누기 w가 되니까 1이 되죠. 그래서 이 식에 의해서 x는 원래 0부터 위드스까지의 범위를 뭐부터 뭐로 바꿔주는 거예요? 마이너스 1부터 플러스 1까지로 바꿔주는 거죠.
x 最小值是多少?鼠标坐标为 0。如果在这里放 0,会得到什么?由于是 w 分之负 w,所以得到负 1。x 坐标为 0 的最末端都会映射到负 1。那么 x 最大值时会是多少?在鼠标区域的最右侧是 w 值。如果放入 w,会得到什么?2w 减 w,所以是 w 除以 w,即 1。因此,通过这个公式,x 原本从 0 到宽度的范围会被转换为从负 1 到正 1 的范围。

Attendees 1 29:02 이쪽 이쪽 x 좌표가 다 뭘로 바뀐다? 마이너스 1로 이쪽 x 좌표는 다 플러스 1로 바뀌게 되는 거죠. 그다음에 똑같은 식으로 해서 y 좌표도 해주면 되는데 y가 제일 작은 값일 때는 어떻게 되나 0 값을 갖죠. 0 값 집어넣으면 뭐가 되나요? y에다 0 집어넣으면 여기는 부호가 바뀌었네요. 그렇죠 y에다 0 집어넣으면 1이 나오죠. 왜 이쪽이 제일 높은 값이니까 마우스 좌표는 이쪽이 y 방향인데 우리는 어떻게 한 거예요? 지금 이쪽이 y 방향이라고 한 거죠. 양수 방향. 그래서 여기가 플러스가 되고 여기 마이너스를 넣어줘야겠죠. 그다음에 y가 가장 큰 값일 때는 얼마가 오나 h가 오겠죠. h가 오면 마이너스 eh 플러스 h니까 마이너스 1이 나오겠네. 그래서 이쪽은 뭐가 된다? 이쪽은 1이 되는 거고 이쪽은 뭐가 되는 거예요? 마이너스 1이 되는 거죠.
与会者 1 29:02 这边 x 坐标都会变成什么?都会变成负 1,这边 x 坐标都会变成正 1。然后以同样的方式处理 y 坐标,当 y 最小值时会是什么?0 值。如果放入 0 值会怎样?在 y 坐标放入 0,这里符号变了。对,放入 0 后会得到 1。为什么?因为这边是最高值,鼠标坐标是 y 方向,我们是怎么做的?现在我们说这边是 y 方向。正方向。所以这里会变成正的,这里需要放入负的。然后当 y 最大值时会是多少?h。当 h 来时,负 eh 加上 h,就会得到负 1。所以这边会变成什么?这边会变成 1,这边会变成什么?负 1。

Attendees 1 29:59 그렇게 하면은 임의의 점 아무거나 콕 찍으면은 어떤 식에 의해서 이 식 변환에 의해서 요 좌표 공간의 점으로 매핑이 되겠죠. 걔를 x 프라임 y 프라임 제로라고 할게요. x 프라임 y 프라임 제로 왜 제로라고 2차원을 이제는 3차원 잡트로 만들 거예요. 이 점을 콕 찍으면은 이 점을 콕 찍으면은 x 프라임 y 프라임 0 이렇게 나오게 되는 거예요. 그다음 스텝은 뭘까?
与会者 1 29:59 这样的话,任意一点,随便点一下,通过这个变换公式,就会映射到这个坐标空间的点。我们称之为 x',y',0。为什么加 0?因为我们现在要将二维转换为三维。点一下,就会得到 x',y',0 这样的点。下一步是什么?

Attendees 1 30:36 그다음 스텝은 이렇게 지금 요 점이에요. 우리가 찍은 점이 밑에 있는 이 점이고 x 프라임 y 프라임 제트를 가상의 구 위로 올릴 거예요. 구라는 거는 아까 화면에 지금 이게 윈도우라고 하면 이 위에 반 구가 이렇게 겹쳐져 있다고 가정을 할 거예요. 그래서 내가 만약에 여기를 딱 찍었어요. 여기를 찍으면은 좌표가 어떻게 될까 여기가 0 콤마 0이고 여기는 0.5 콤마 0.5 정도가 되겠죠. 0.5 0.5 0인 거를 어떻게 9 위로 올리겠다는 얘기예요. 우리 화면 위에 이렇게 가상의 반구가 몰려 있다고 하고 그러면 결국 뭐만 잡으면 계산해 주면 되나요? 제 좌표만 계산해 주면 되죠. 9의 방정식은 x의 제곱 더하기 y 제곱 더하기 z의 제곱은 1이니까 z의 제곱은 1 빼기 x의 제곱 마이너스 y의 제곱이고 거기다 루트 씌워주면 되겠죠 왜 근데 플러스 마이너스 2개가 나오는데 왜 플러스만 할까?
下一步是这样的重点。我们拍摄的点在底部,我们将把 x'、y'、z 虚拟地提升到球体上。假设球体是这样的,如果这是窗口,那么半球会这样重叠。如果我在这里点击,坐标将会是什么?这里是 0,0,这里大约是 0.5,0.5。我们如何将 0.5 0.5 0 提升到 z 上?在我们的屏幕上有一个假想的半球,那么计算什么就可以了?只需计算我的坐标。z 的方程是 x 平方加 y 平方加 z 平方等于 1,z 平方等于 1 减 x 平方减 y 平方,然后开平方。但为什么会出现正负两个解,为什么只取正的?

Attendees 1 31:31 위쪽 방향이니까 그렇죠 그래서 x 프라임 y 프라임은 앞에 단계에서 계산된 거고 그다음에 지 프라임은 g 프라임은 루트의 1 마이너스 x 프라임의 제곱 마이너스 y 프라임의 제곱하면 제 값이 나오겠죠. 그래서 여기 스크린 상의 점이 가상의 구 위에 있는 3차원적으로 매핑이 되는 거예요. 됐나요? 그다음 스텝은 뭘까? 우리 회전할 때 이 점을 콕 찍어가지고 이쪽으로 딱 드레이깅 할 수 있겠죠. 드레이깅 하게 되면은 이 점에 이 점에 대응되는 구위의 점 계산했어요. 그다음에 조금 움직이면은 이 점에 대응되는 구위의 점도 이제 같이 계산을 하는 거예요. 마우스의 위치를 새로운 좌표로 이렇게 드레깅을 했다고 가정하면은 앞에서 얘기했던 스텝 원과 스텝 2를 이용해서 이번에는 드레깅된 q 프라임메션도 계산을 할 수가 있겠죠. 그래서 결과적으로 보면 이렇게 되는 거예요.
因为是向上的方向。所以 x'、y'是在前一步计算的,然后 z'是根号下(1 减 x'平方减 y'平方)。这样屏幕上的点就能在虚拟球体上进行三维映射。明白了吗?下一步是什么?当我们旋转时,可以点击这个点并拖动。拖动后,我们计算对应于这个点的球体上的点。然后稍微移动时,也会计算对应于这个点的球体上的点。假设将鼠标位置拖动到新坐标,我们可以利用之前讨论的步骤 1 和步骤 2 来计算拖动后的 q'。最终结果就是这样的。

Attendees 1 32:36 화면에 p 점을 찍은 다음에 q 점으로 쭉 드래깅을 했다고 가정을 하면은 p 점의 반 부위의 점을 p 프라임, q 점의 반 구 위에 점을 q 프라임이라고 이렇게 계산한 거예요. 두 개를 q 프라임과 q 프라임을 계산을 한 거예요. 그럼 이거 왜 계산을 할까? 이거 바로 회전축을 찾기 위한 거예요. 회전축 회전축 유를 유와 회전 각도를 구하게 되는데 회전 축은 어떻게 하면 될까 p 프라임과 q 프라임의 점을 벡터로 보고 두 개를 외적을 하면 회전축이 나오게 되죠. 그럴 것 같아요. 예를 들면 내가 여기서 의적을 찍어서 이렇게 쭉 내렸어요. 그러면 회전축이 어떻게 될까요? 회전축은 점을 기준으로 이 점을 찍었다가 이쪽으로 쭉 내렸으면 화면이 이렇게 회전되길 원하는 거죠. 무슨 말인지 알겠어요 화면이 이렇게 회전되기를 원하니까 그 회전축을 찾기 위해서는 지금 요거예요.
假设与会者 1 在 32:36 在屏幕上点击了 p 点,然后拖动到 q 点,他们计算了 p 点的半个部位的点为 p',q 点半球上的点为 q'。为什么要进行这个计算?这正是为了找到旋转轴。要确定旋转轴和旋转角度,旋转轴该如何确定呢?将 p'和 q'点视为向量,对其进行叉乘就能得到旋转轴。例如,如果我在这里点击并向下拖动,旋转轴会是什么?旋转轴是基于这个点,如果我点击这个点并向下拖动,我希望屏幕能这样旋转。明白了吗?因为希望屏幕这样旋转,所以要找到这个旋转轴。

Attendees 1 33:36 이거 이 점을 선택해서 이렇게 끌었다고 하면은 요 p 프라임과 q 프라임을 외적을 한번 해보면은 외적을 해보면은 그거에요. 두 개의 벡터의 수직한 방향이 나오죠. 얘가 이제 회전축이 된다는 얘기예요. 내가 이쪽에서 여기를 선택해서 이쪽으로 하면은 어떤 게 어떻게 회전되길 원해요? 화면이 이렇게 회전되기를 원하죠. 그럼 회전축은 어떻게 되나 이벡터와 이벡터를 외접하게 되면 위쪽으로 향하죠. 그래서 이게 이제 회전축을 구하는 방식이에요. 그러면 회전 각도는 어떻게 구할까? 회전 각도는 2개 벡터의 사입각을 계산하면 되겠죠. 그래서 이거는 마스크 코사인 이용해서 계산하면 회전 각도가 나오네요. 회전축은 p 벡터하고 p 프라임 벡터하고 q 프라임 벡터를 외적을 해주면은 두 개의 수직한 방향 벡터를 잡고 그 축으로 회전을 하겠다는 얘기예요.
与会者 1 在 33:36 解释,如果选择这个点并这样拖动,对 p'和 q'进行叉乘,就会得到两个向量的垂直方向。这就是旋转轴。如果我从这里选择并拖动到那里,我希望屏幕如何旋转?希望屏幕这样旋转。那么旋转轴是什么?如果将这两个向量叉乘,就会朝上。这就是确定旋转轴的方法。那么旋转角度如何计算?旋转角度可以通过计算两个向量的夹角来确定。使用反余弦函数就可以计算出旋转角度。旋转轴是通过 p 向量、p'向量和 q'向量的叉乘得到的,找到垂直方向的向量,然后围绕该轴进行旋转。

Attendees 1 34:38 그래서 실제 프로그램을 보면은 실제 프로그램을 보면은
与会者 1 34:38 所以当看实际程序时,实际程序时

Attendees 1 34:50 이것들은 전역 변수들이에요. 저녁 변수들. 그래서 매니플레이트 모드라는 거는 이제 1일 때는 회전을 나타내고 2일 때는 이동을 나타내겠다는 변수예요. 그다음에 스타트 피티 같은 경우는 마우스를 클릭하는 순간 만약 마우스를 클릭하는 순간 그 점에 위치를 저장할 변수고 그다음에 요 액시스가 말고 뭘까요? 액시스가 요 액시스가 바로 아까 그 로테이션 축 있죠 u 요 회전축 회전축을 저장할 글로벌 변수예요. 그다음에 요 앵글 값이 뭘까요? 앵글 값 요 앵글 값이 바로 요 회전 각도 세타 세타를 저장할 변수고 그다음에 요 rot mat는 뭘까요? rot mat 얘는 로테이션 매트릭스 현재 현재 모델 행렬 모델 행렬을 기록하고 있을 행렬이에요. 배열. 그다음에 줌은 이제 나중에 줌인 줌아웃 할 때 사용하는 변수고 그다음에 텐은 이동할 때 화면을 이렇게 좌우로 끌 때 사용할 변수예요.
与会者 1 34:50 这些是全局变量。晚上变量。所以操作模式的意思是当为 1 时表示旋转,为 2 时表示移动。接下来,如果开始点击鼠标的那一刻,那么点击鼠标的那一刻将保存该点的位置的变量,然后这个轴是什么?轴就是刚才的旋转轴,u 轴是旋转轴,用于存储旋转轴的全局变量。接下来这个角度值是什么?角度值就是旋转角度θ,用于存储θ的变量。然后这个 rot mat 是什么?rot mat 是旋转矩阵,记录当前模型矩阵的数组。接下来缩放是用于以后进行放大缩小的变量,然后 ten 是用于左右拖动屏幕时使用的变量。

Attendees 1 36:03 메인 함수 보면은 glut 초기화하는 부분 그다음에 디스플레이 모드 설정하는 부분 이 부분은 생략을 하면 되고 여기 콜백 함수 4개를 등록을 해 5개를 등록을 했네요. 콜백 함수 glut 리쉐이 펑크 요거 뭐라고 했어요? 윈도우 처음 생성되거나 사이즈 변경될 때 호출되는 콜백 함수 등록한다고 했죠. 그다음에 glut 마우스 펑크는 뭐예요? 마우스 클릭할 때 마우스 클릭 혹은 해제할 때 호출되는 콜백 함수 즉 마우스라는 함수로 등록을 했네요. 그다음에 GLT 모션 펑크는 뭐라고 했어요? 드래깅할 때 호출된다고 했었죠. 마우스 버튼을 누르고 움직일 때 그다음에 안 배운 함수가 하나 있네요. 뭐 glut 마우스 휠 펑크 이건 어떨 때 호출될까요? 마우스 휠을 드래깅할 때 마우스 휠을 위아래로 움직일 때 호출되는 함수를 등록하는 게 glut 마우스 휠 펑크예요. 그래서 그 함수 이벤트 핸들러 이름을 마우스 휠이라고 정의를 했어요.
与会者 1 36:03 查看主函数,初始化 glut 的部分,然后是设置显示模式的部分,这部分可以省略。在这里注册了 4 个,不,是 5 个回调函数。glut 重塑函数是什么?说过是在窗口首次创建或大小改变时调用的回调函数。然后 glut 鼠标函数是什么?是在鼠标点击或释放时调用的回调函数,也就是注册了鼠标函数。接下来 glut 运动函数是什么?说过是在拖动时调用。鼠标按下并移动时。还有一个我们没学过的函数,glut 鼠标滚轮函数,什么时候调用?是在拖动鼠标滚轮或上下移动滚轮时调用的函数。所以将这个事件处理程序命名为鼠标滚轮。

Attendees 1 37:10 그다음에 디스플레이 펑크로 렌더링하는 함수 이렇게 5개만 콜백 함수를 등록을 했네요. 아까 그러면 이제 마우스 함수부터 보면 돼요. 요 마우스 함수 이거는 언제 호출되나요? 요 콜백 함수는 언제 호출돼요? 여러분이 마우스 딱 클릭하는 순간 호출이 되죠. 클릭하는 순간 만약에 스테이트가 스테이트가 glut 다운이면은 눌렀다는 얘기죠. 눌렀다는 얘기면은 스타트 PT의 0과 스타트 PT의 1에 XY를 저장을 한대요. 아까 스타트 피티는 뭐였나? 여기 여기 여기 있네 저녁 변수로 저장돼 있는 변 있죠 여기다가 현재 클릭한 위치를 저장을 하겠다는 얘기예요. 그다음에 만약에 버튼이 레프트 버튼하고 같으면은 왼쪽 마우스 버튼 클릭해서 움직이면 어떻게 드래깅하면 어떻게 된다고 했어요? 회전된다고 했었죠. 그다음에 이건 이제 회전이니까 메리플레이트 모드를 1로 지정을 해줘요. 이해되죠? 그다음에 오른쪽 마우스 버튼을 눌렀으면은 매개 플레이트 모드를 얼마로 지정을 해줘요? 2로 지정을 해주죠.
与会者 1 37:10 然后是显示函数,用于渲染,就这样注册了 5 个回调函数。那么现在可以从鼠标函数开始看了。这个鼠标函数什么时候调用?这个回调函数什么时候调用?当你鼠标点击的那一刻就会被调用。点击的那一刻,如果状态是 glut 按下,就是说按下了。按下意味着要将开始点的 0 和开始点的 1 的 XY 坐标保存起来。开始点是什么来着?在这里,在这里,保存在这个晚上变量中,意思是要保存当前点击的位置。然后,如果按钮是左键,点击左键并移动,拖动会怎样?说过会旋转。然后因为是旋转,所以将材料平面模式设置为 1。明白了吗?然后如果按下右键,将材料平面模式设置为多少?设置为 2。

Attendees 1 38:27 그래서 이게 지금 내가 회전하기 위해서 마우스 버튼을 눌렀는지 아니면 장면을 이동하기 위해서 마우스 버튼을 눌렀는지를 이 두 개로 구분을 해주겠다는 얘기죠. 그래서 여기서 준비 작업을 해 주는 거예요. 그다음에 jut 업 하면 이거는 언제 발생하나 회전하다가 혹은 이동하다가 딱 떼는 순간 발생을 하겠죠. 떼는 순간은 뭘 해줘야 되나 다시 리셋을 해줘야겠죠. 초기화 그래서 메뉴 플레이트 모드는 0으로 아무 모드도 아니다라고 바꿔주고 그다음에 스타트 스타트 PT는 0으로 다시 세팅을 해주고 앵글 값도 0으로 초기화를 해줄 거예요. 여기서는 뭔가 상태 초기화해 주는 업 하면은 마우스를 떼는 순간 마우스 이벤트 핸들러 되게 간단하네요. 어떤 어떻게 마우스를 누르는 순간은 왼쪽 버튼을 눌렀냐 오른쪽 버튼을 눌렀냐에 따라서 매니플레이트 모드만 결정을 해주는 거예요. 마우스를 떼는 순간은 초기화를 해주고 중요한 건 어디일까 마우스를 누르고 이제 움직일 때죠.
所以这是为了区分我是按下鼠标按钮是为了旋转还是为了移动场景。所以在这里做准备工作。然后鼠标松开,这是在旋转或移动时松开的瞬间发生。松开时需要做什么?当然是重新重置。初始化,将菜单板模式设置为 0,表示没有任何模式,然后将起始 PT 重新设置为 0,角度值也重置为 0。在这里是在鼠标松开时初始化状态。鼠标事件处理很简单。根据是按下左键还是右键来决定操作模式。松开时进行初始化,最重要的是什么?是鼠标按下并移动时。

Attendees 1 39:32 드레이깅할 때 드레깅 할 때 어떤 일이 발생을 할까? 드래깅할 때 콜백 함수 우리 모션으로 정리를 했어요. 모션 모션으로 정리를 하고 XY는 뭐예요? 이거는 현재 드레깅하는 마우스의 위치죠. 전달 받는다고 했어요. 매니플레이트 모드가 1이면은 이거는 어떤 모드인가 1이면은 회전 모드죠. 그래서 이 부분이 담당하는 게 회전 모드예요. 그다음에 메뉴 플레이트 모드가 2면은 이 부분이 담당하는 게 이동을 담당하는 거예요. 회전 모드 우리 아크볼 이용해서 회전한다고 했으니까 여기부터 한번 볼게요. 다음은 플로 타입으로 pspy 제트 qsqi q 제 정의를 하고 겟 스피어 코디네이트가 아까 반 구위로 올린다고 했었죠? 고 역할을 해주는 함수예요. 사용자 정의 함수 스타트 PT의 0 스타트 PT에 1 하면은 어떤 점을 올린 거예요? 어떤 점을 반구 위로 올려서 그 위치를 pxpy p세트에 저장을 하겠다는 얘기예요. 이거 뭐 넘겨준 거예요?
拖动时会发生什么?拖动时的回调函数我们已经整理过了。整理为 Motion,XY 是什么?这是当前拖动的鼠标位置,之前说过要传递。如果操作模式为 1,这是什么模式?1 是旋转模式。所以这部分负责旋转模式。如果菜单板模式为 2,则这部分负责移动。对于旋转模式,我们之前说过使用 arcball 旋转,让我们从这里开始看。接下来是浮点类型的 pspy 定义,获取球坐标是我们之前提到的放置在半球上。这是一个用户自定义函数。起始 PT 为 0,起始 PT 为 1 时,意味着将某个点放置在半球上,并将其位置保存在 pxpy p 集中。这是传递的内容?

Attendees 1 40:39 포인트 넘겨줬죠 포인트 넘겨줬다는 얘기는 여기에다 값을 적으라는 얘기예요. 스타트 PT의 제로 스타트 PT의 1은 처음에 딱 클릭한 위치죠. 처음에 클릭한 위치에 대응되는 부위의 점을 여기다 저장을 하는 거고 그다음에 겟 스피어 코이네이트 x y는 어떤 위치예요? 지금 처음에 스텝 눌렀다가 조금 움직이는 위치죠. 조금 움직임 위치니까 뭐에 해당하는 건가 우리 q에 해당하는 거죠. 아까 어디서
参会者 1 40:39 点传递了,传递点意味着要在这里填写值。起始点的零起始点的 1 是最初点击的位置。在最初点击的位置对应部位的点存储在这里,然后获取球坐标 x y 是什么位置?现在是最初按步骤后稍微移动的位置。因为是稍微移动的位置,所以是对应于我们的 q。之前在哪里?

Attendees 1 41:14 처음에 클릭한 위치 p 그다음에 조금 움직이는 위치 q p에 해당하는 부위의 점 q에 해당하는 부위의 점을 지금 계산을 한 거예요. 어디서 여기서 이 두 줄에서 됐나요? 그다음에 회전축과 회전 각도 액시스 엑시스가 뭐라고 했지? 회전축을 나타내는 거라고 했죠 회전축은 아까 어떻게 구한다고 했어요? 요 pxpi pz와 qxqi qz를 뭐 해주면 돼요? 크로스 터덕 하면 되죠. 외적 요게 외적 공식 외적 공식 다 알아요. 3D 벡터 외적 하는 거 모르면은 공부를 하세요. 이거는 외적 공식에 의해서 벡터 외적하면은 이제 회전축이 나오죠. 그다음에 앵글은 회전 각도인데 처음은 0으로 놓고 일단 회전축의 길이를 한번 구해봐요. 길이를 회전축 벡터가 나오면 회전축의 길이를 한번 구해서 너무 길이가 작으면은 너무 길이가 작으면 이거는 어떤 움직임을 얘기하는 거예요? 정말 너무 조금 움직였다는 얘기죠.
参会者 1 41:14 最初点击的位置 p,然后是稍微移动的位置 q,现在计算了 p 对应部位的点和 q 对应部位的点。这是在哪两行完成的?然后是旋转轴和旋转角度,轴是什么?旋转轴,之前是如何求的?将 pxpi pz 和 qxqi qz 做什么?叉乘即可。外积,这是外积公式。外积公式都知道。如果不知道 3D 向量外积,就去学习吧。通过外积公式进行向量外积,就得到了旋转轴。然后角度是旋转角度,首先设为 0,先计算旋转轴的长度。当旋转轴向量出现后,计算旋转轴的长度,如果长度太小,这意味着什么?意味着移动非常微小。

Attendees 1 42:29 너무 조금 움직였으면 그냥 무시를 하고 이 길이가 어느 정도 일정 변이 이상일 때는 앵글은 아크 코사인을 이용해서 아크 코사인을 이용해서 각도를 구하는 거예요. 지금 회전 각도를 그래서 요 모션 펑션에서는 마우스를 왼쪽 버튼을 클릭하고 조금이라도 움직이게 되면은 얼마 이상 안 움직이면은 0.0001 이상 움직이게 되면은 움직이게 되면은 뭘 계산하죠? 전 회전축과 회전 각도를 막 계산을 하는 거예요. 됐나요? 그다음에 메뉴 플레이트 모드가 2면은 어떤 경우인가? 2면은 여기 아까 오른쪽 마우스 버튼을 누른 거죠. 오른쪽 마우스 버튼을 누르고 드래깅한 경우예요. 그럴 때는 뭔가 DX dy를 계산해서 로테이션 매트릭스하고 곱한 다음에 해 주는데 이건 조금 이따 설명할게요. 이 부분은 지금은 회전 위주로 설명을 할게요. 일단은 어쨌든 이렇게 해서 액시스와 앵글을 구했으면은 요 밑에서 요거 요것도 되게 중요해요.
与会者 1 42:29 如果移动得太少,就直接忽略,当这个长度超过某个一定变化值时,使用反余弦(arc cosine)来计算角度。现在是计算旋转角度。所以在这个运动函数中,当左键鼠标点击并且稍微移动,如果移动距离超过 0.0001,那么计算什么呢?我计算的是之前的旋转轴和旋转角度。明白了吗?接下来,菜单平板模式为 2 的情况是什么?这是右键鼠标按下的情况。右键鼠标按下并拖动。这种情况下计算 dx dy,然后与旋转矩阵相乘,这部分我稍后再解释。现在我主要讲解旋转部分。总之,一旦确定了轴和角度,下面这部分也非常重要。

Attendees 1 43:39 어떻게 스타드 PT와 스타트 PT의 0번째와 스타트 PT의 첫 번째를 XY로 업데이트를 해줘요. 그럼 이 XY는 뭔데 지금 움직이는 위치죠? 이거 왜 해줘야 될까? 내가 여기 선택해서 조금 움직였으면은 이제 이게 뭐가 돼야 돼요? 스타트 피티가 돼야겠죠. 그리고 또 움직이게 되면 이게 XY가 돼야 되는 거니까 그래서 계속 업데이트를 해줘야겠죠. 그다음에 glut 포스트 리 디스플레이는 뭐 하는 거라고 했죠? 디스플레이 그림 랜덤 함수 다시 호출하는 거라고 했었죠. 그래서 랜덤 함수 다시 호출하게 되면은 요 앵글과 요 액시스만큼 이제 회전이 된 상태로 화면이 그려지게 될 거예요.
与会者 1 43:39 如何更新起始点(start PT)的第 0 个和第 1 个的 XY 坐标?这个 XY 是什么?现在是移动的位置。为什么要这样做?如果我在这里选择并稍微移动,那么现在应该变成什么?它应该成为起始点。当继续移动时,这个 XY 就成为新的位置,所以需要不断更新。然后,glut post redisplay 是做什么?我们之前说过是重新调用显示随机函数。当重新调用随机函数时,屏幕将按照这个角度和轴进行旋转并重绘。

Attendees 1 44:27 데스피어 코디네이트는 아까 뭐라고 했어요? x 콤마 y 좌표를 9위의 좌표로 올린다는 얘기를 했었죠. 이 XY의 범위는 어떻게 되나 처음에는 윈도우 좌표가 들어오지만 여기서 뭐 해줘요? PX PX와 py에다가 값을 저장을 해주죠. 이거 어떤 공식 아까 2 곱하기 1기 w 나누기 w 이거를 마이너스 1부터 플러스 1까지 바꿔주는 거고 y 잡혀도 마이너스 1부터 플러스 1까지 잡혀주는 바꿔주는 어떤 공식이에요? 이거
与会者 1 44:27 关于视角坐标我们刚才说过什么?x 坐标和 y 坐标提升到第 9 个坐标。那么这个 XY 的范围是什么?最初是窗口坐标进来,但在这里要做什么?将值保存到 PX PX 和 py。这是什么公式?刚才是 2 乘以 1 的 w 除以 w,这是将其从负 1 到正 1 转换的公式,y 轴也同样从负 1 到正 1 转换的公式是什么?这个

Attendees 1 45:05 이 공식 적용한다는 얘기죠. 이 공식
与会者 1 45:05 就是应用这个公式。这个公式

Attendees 1 45:16 그다음에 r 값을 구하네. r 값 r 값은 뭘까? x의 제곱 더하기 y의 제곱을 해준 거예요. x의 제곱 더하기 y의 제곱 이거는 뭐냐 하면은 우리 윈도우가 이렇게 있다고 가정을 할게요. 윈도우가 이렇게 있는데 여기다가 반 구를 올린다고 가정을 하면은 반구가 어떻게 올라가요?
然后计算 r 值。r 值是什么?是 x 的平方加上 y 的平方。假设我们有一个窗口,在这个窗口上方放置一个半球,半球会如何放置?

Attendees 1 45:51 이렇게 올라가겠죠. 이 위에 이렇게 올라가는데 만약에 사용자가 여기를 찍으면 어떻게 되나 여기를 찍으면 여기를 찍으면 XY를 올리면 안 되죠. 이거는 여기를 찍어도 XY를 올리면 안 되죠. 여기를 찍었는지는 어떻게 판단할 수 있을까요? 길이가 길이가 뭐보다 크면은 1보다 크면으로 판단할 수가 있겠죠. 그래서 이 반지름을 구해요. PX의 제곱 더하기 QR의 제곱에 반제곱의 b를 구해서 얘가 만약에 1보다 크다 하면은 이쪽을 택했다는 얘기죠. 사용자가 그러면 어떻게 해주면 될까 그냥 이쪽으로 프로젝션을 시켜줘요. 이쪽으로 부의 끝으로 그럼 이거 어떻게 해야지 프로젝션이 될까 이거를 여기부터 여기까지의 길이가 10이었어요. 이거를 1로 만들어주려면 어떻게 돼요? 10으로 나눠주면 되겠죠. 그래서 이거 알 루트의 r로 이제 나눠주게 되는 거예요. 노멀라이즈 한다고 생각하면 되죠. 그리고 제트는 어떤 값으로 z는 9의 끝은 머리니까 0 값이겠죠.
它会这样放置。假设用户点击此处,如何处理?不能直接使用 XY 坐标。那么如何判断点击位置呢?可以通过长度是否大于 1 来判断。因此,我们计算半径,即 PX 的平方加上 QR 的平方的平方根。如果大于 1,则说明用户选择了这一侧。那么如何处理?只需将其投影到这一侧的末端。如何实现投影?如果这段长度是 10,要将其缩放到 1,只需除以 10。所以现在用 r 的平方根进行归一化处理。Z 轴的值为 0,因为这是头部的末端。

Attendees 1 46:57 0 값을 넣고 그렇지 않다면은 이게 이제 일반적인 경우예요. 일반적인 경우 어떤 경우 이런 데를 클릭한 경우 이런 데를 클릭한 경우는 제 값을 어떻게 해주면 돼요? 루트의 1 빼기 r 해주면 되겠네요. 알 1 빼기 r 루트의 루트의 1 빼기 r 요거 이 공식은 어떤 공식인가? 이 공식이 어떤 공식이에요? 아까 얘기했던 이 공식을 정의를 한 거죠. 그렇죠
与会者 1 46:57 0 放入值,如果不是,这就是现在的一般情况。一般情况下,如果点击这里,如果点击这里,我的值应该怎么处理?减去根号的 1/r 就可以了。知道 1 减去 r 根号的 1 减去 r,这个公式是什么公式?这个公式是什么?刚才说的这个公式的定义。对吧。

Attendees 1 47:36 그래서 겟 스피어 코디네이트는 이렇게 쉽게 구현이 될 수 있고 이걸 이용해서 우리가 왼쪽 버튼을 누르고 드래깅 한 경우에 회전축과 회전 각도를 구할 수 있다라는 거까지 얘기를 하고 너무 졸린 것 같아가지고 10분을 쉴게요. 2시 푹 쉬고 2시 5분에 다시 할게요. 그러면 13분.
与会者 1 47:36 所以获取球坐标可以这么简单地实现,利用这个,我们在按下左键并拖动的情况下可以求出旋转轴和旋转角度。我似乎太困了,休息 10 分钟。2 点好好休息,2 点 5 分再继续。那就是 13 分钟。

clovanote.naver.com