CG week3.1.1
2025.03.17 Mon PM 1:04 ・ 65Minutes 7seconds
ZHANG YIWEN
CG 第 3 周 3.1.1 2025.03.17 周一 下午 1:04 ・ 65 分 7 秒 张逸文
Attendees 1 00:01
우리 지난 시간에 오픈gl 프로그래밍에 삼각형 2개 그리는 거까지 했었죠.
그래서 삼각형 그리는 거 했는데 이번 시간에는 삼각형뿐만 아니라 여러 가지 기본 객체들이 있어요.
비스에서 정리는 여러 기본 객체들이 있는데 그런 다양한 기본 객체들을 출력하는 방법 그다음에 그거를 이제 레스터화하는 방법 알고리즘에 대해서 소개를 해보도록 할게요.
저희 AI 소프트웨어가 아니라 컴퓨터 AI 학부죠.
出席人数 1 00:01 在上次课程中,我们已经在 OpenGL 编程中绘制了两个三角形。因此,在绘制三角形之后,这次课程将介绍不仅仅是三角形,还有其他各种基本对象。在 BIS 中,有多种基本对象,我们将介绍如何输出这些各种基本对象,以及如何对其进行光栅化的算法。这不是 AI 软件,而是计算机 AI 系。
Attendees 1 00:43
그래서 학습 내용으로 보면은 그래픽스 출력 기본 객체 그래서 점이라든가 직선 선이라든가 그다음에 다각형이라든가 다각형은 특히 이제 삼각형 사각형 그다음에 일반적인 다각형 이렇게 확장을 할 수가 있겠죠.
이런 것들을 우리가 어떻게 사용하는지 그다음에 기본 출력 객체를 위한 본질 함수들 몇 가지를 살펴볼 거고 레스터화 기법 여기 이제 생략이라고 돼 있는데 생략하지 않고 브레즈네 알고리즘이라는 거를 한번 살펴볼 거예요.
브레즈네 알고리즘 컴퓨터 그래픽스 역사 설명할 때 초창기에 브레즈 알고리즘이 개발됐다 그런 식으로 얘기를 했었는데 그게 이제 이번 시간에 소개를 할 거예요.
출력을 위한 기본 객체는 당연히 점 포인트 점 출력할 수 있겠죠.
그래서 점이라는 거는 뭐 이런 형태 동그라미로 표현되기도 하고 사각형으로 표현되기도 하고 그래서 몇 개의 픽셀을 픽셀을 색칠을 하면 이 점이 되는 거죠.
그다음에 선이라는 거는 점 두 개를 연결하면 선이 되는 거죠.
从学习内容来看,基本图形输出对象包括点、直线,然后是多边形,特别是三角形、四边形,然后是一般的多边形,可以这样扩展。我们将探讨如何使用这些对象,并查看用于基本输出对象的几个本质函数,以及光栅化技术,这里写着"省略",但我们不会省略,而是会研究 bresenham 算法。在计算机图形学早期历史中,bresenham 算法被开发出来,本次课程将介绍这一算法。基本输出对象当然是点,可以输出点。点可以用圆形或方形表示,通过在几个像素上着色来表示这个点。然后,连接两个点就形成了一条线。
Attendees 1 02:02
점 두 개를 이렇게 연결하면은 라인이 되는 거고 그다음에 점이 3개가 모이면 뭐가 될까요?
점이 3개가 모이면 삼각형이 되겠죠. 삼각형이 되고 그다음에 점이 4개가 모이면은 사각형이 되고 점이 n개가 모이면 일반적으로 이제 폴리곤 다각형이 된다 이렇게 이해를 하면 될 것 같아요.
그래서 출력을 위한 기본 객체들은 이런 것들이 있고 원은 출력할 수 있을까요?
없을까요? 오픈제열에서 이거는 없어요. 타원은 없어요.
부채골은 없어요. 그럼 어떻게 해야 되나 포인트 라인 폴리곤을 가지고 여러분이 적절하게 확장을 해서 원도 타원도 부채골도 출력을 해야겠죠.
그래서 그런 것들을 이제 함수로 만들어주면은 재활용할 수가 있을 거예요.
连接两个点就形成了一条线,那么如果 3 个点聚集在一起会怎样?3 个点会形成三角形。形成三角形,然后如果 4 个点聚集,就会形成四边形,如果 n 个点聚集,通常就形成多边形。这就是基本输出对象。那么圆形可以输出吗?OpenGL 中是没有的,椭圆也没有,扇形也没有。那该怎么办?你需要用点、线和多边形适当地扩展,来绘制圆形、椭圆和扇形。通过创建这些函数,就可以重复使用了。
Attendees 1 03:07
점과 선은 너무 간단해서 특별하게 이제 이야기할 건 없는데 사각형 사각형에 대해서는 조금 추가적인 얘기를 몇 가지 할게요.
이 소리가 어디서 나만 들리나요? 에어컨 소리인가 나만 예민한 건가요?
그런 거죠. 상당히 예민하네. 지금 안 나요? 다각형 같은 경우는 여러분이 이제 앞으로 코딩하다 보면은 한 가지 알아야 될 게 있어요.
다각형은 앞면과 뒷면이 있다는 거예요. 여러분 색종이 보면은 요즘은 옛날에는 색종이가 앞면만 색이 칠하고 뒤에는 다 하얀색으로 표시가 돼 있었죠.
근데 요즘은 양면 색종이를 써요. 그래서 앞에는 파란색, 뒤에는 빨간색 그래서 어디가 안면일까 어디가 뒷면일까 그걸 이제 구분을 해야 돼요.
그래서 그래픽스에서도 마찬가지로 삼각형을 그리든 사각형을 그리든 앞면과 뒷면을 구분을 해줘서 앞면은 빨간색으로 그릴 수 있고 뒷면은 파란색으로 그릴 수가 있어요.
与会者 1 03:07 点和线太简单,没什么特别的好说的,但是关于矩形,我将多说几句。这声音是不是只有我能听到?是空调声音还是我太敏感?就是这样。相当敏感。现在听不到吗?对于多边形,当你未来编程时,有一件事要知道。多边形有前面和背面。就像你看彩纸,过去彩纸正面是有颜色的,背面是白色。但现在我们用双面彩纸。正面是蓝色,背面是红色,所以哪里是正面,哪里是背面,我们需要区分。在图形学中也是一样,无论是绘制三角形还是矩形,都要区分前面和背面,正面可以绘制成红色,背面可以绘制成蓝色。
Attendees 1 04:16
그럼 앞면 뒷면을 어떻게 구분하냐 하면은 일단 다각형은 앞면과 뒷면으로 구분된다라는 사실을 같이 이제 공감을 하고 그래서 법선 벡터라는 게 있어요.
법선 법선이라는 걸 우리 영어로 뭐라고 하죠? 영어로 노멀 벡터라고 하죠.
노멀 벡터 법선 벡터를 이용해서 법선 벡터가 향하는 방향이 다각형의 앞면이라고 약속을 한 거예요.
복선 벡터는 다각형의 앞면을 나타낸다 이렇게 얘기를 하는 거고 그러면은 법선 벡터의 방향은 어떻게 결정이 되나 알아야겠죠.
법선 벡터의 방향은 사실 이거 저기 뭐야 선형 대수 같은 거 배운 사람들은 삼각형이 있을 때 법선 벡터가 요 방향의 법선 벡터 수직한 방향이죠.
평면의 곡선 벡터 외적에 의해서 결정된다고 들어봤을 거예요.
그렇죠 두 개의 벡터의 외적에 의해서 결정되는데 그렇게 포멀하게 정의할 수도 있지만 여기서는 다각형을 표현하는 정점이 있겠죠.
与会者 1 04:16 那么如何区分前面和背面呢?首先,我们要达成共识,多边形确实有前面和背面。这里有一个法线向量。法线,我们用英语怎么说?英语中叫法线向量(Normal Vector)。我们约定,法线向量指向的方向就是多边形的正面。法线向量表示多边形的正面。那么法线向量的方向是如何确定的呢?对于学过线性代数的人来说,当有一个三角形时,法线向量是垂直于平面的方向。你可能听说过通过两个向量的叉积来确定。是的,它是通过两个向量的叉积来确定的,但在这里,我们有表示多边形的顶点。
Attendees 1 05:25
정점 정점을 나열 순서로 오른손으로 감았을 때 정점을 나열 순서대로 오른손으로 감았을 때 엄지손가락 방향이 법선의 방향을 나타낸대요.
예를 들면 삼각형이 있어요. 여기 삼각형이 하나가 있는데 나열을 이 삼각형을 표현할 때 p1, p2, p3 요렇게 요 세 점의 순서로 삼각형을 표현한 거예요.
그러면은 p1, p2 p3 3점으로 나열 순서들을 오른손으로 딱 감으면 엄지손가락이 어디를 향하여 이 위쪽을 향하죠.
그래서 여기 요 부분이 이제 앞면이 되는 거예요. 반면에 반면에 p1, p2, p3 이렇게 나열하면은 오른손으로 이렇게 감아요.
나열 순서를 그러면 법선이 어디를 향하고 있어요?
안쪽을 향하고 있죠. 그럼 우리가 보는 면은 어떤 면이 되는 거예요?
뒷면이 되는 거고 저 반대쪽에 있는 게 앞면이 되는 거죠.
오른손으로 감았을 때 엄지손가락 엄지손가락이 가리키는 방향이 법선 앞면이 된다라는 거죠.
与会者 1 05:25 顶点 按照顶点排列顺序,当用右手卷绕时,拇指的方向表示法线的方向。例如,有一个三角形。这里有一个三角形,在表示这个三角形时,我们用 p1、p2、p3 这三个点的顺序来表示。那么,当用右手卷绕 p1、p2、p3 这三个点时,拇指会指向上方。因此,这部分就成为了正面。相反地,如果按照 p1、p2、p3 的顺序卷绕右手,法线会指向内部。那么我们看到的面是什么面?它就成为了背面,而背面的对面则是正面。当用右手卷绕时,拇指指向的方向就是法线正面。
Attendees 1 06:37
알겠어요 이거를 이렇게 오른손 법칙에 의해서는 이렇게 표현을 하고 수학적으로 표현할 때는 어떻게 될까 수학적으로 표현할 때는 인접한 두 방향성 엣지의 외적으로 정의를 한대요.
그래서 여기 보면은 이제 요법 요게 e1이라는 첫 번째 지가 있고 e2라는 두 번째 지가 있고 e3라는 세 번째 h는 여기 있을 수 있겠죠.
21과 22를 외적을 하면 어떤 방향이 될까요? 21은 이쪽 방향이고 e2는 이쪽 방향이지만 이거 욜로 이렇게 옮길 수 있죠.
벡터는 그래서 두께 옮기면은 이게 2원이고 얘가 22가 되니까 이제 이거 내면 내적을 하면은 요 파란색 방향하고 동일한 방향이 나오겠죠.
그래서 인접한 두 개의 엣지를 외적으로 노말 벡터 즉 법선 방향을 구할 수가 있어요.
여기서도 마찬가지로 e1과 e2 애적을 하면 저 안쪽으로 들어가는 방향이 나오게 되는 거죠.
与会者 1 06:37 明白了,这是根据右手法则表示的。那么在数学上如何表示呢?数学上是通过相邻两个方向性边缘的叉积来定义的。在这里,我们可以看到有第一个边 e1,第二个边 e2,第三个边可能是 e3。如果对 e1 和 e2 进行叉积,会得到什么方向?e1 是这个方向,e2 是另一个方向,但我们可以移动这些向量。向量可以平移,所以现在 e1 是这个方向,e2 是那个方向。当我们进行内积时,会得到与蓝色方向相同的方向。因此,我们可以通过相邻两个边的叉积得到法线向量,即法线方向。在这里,对 e1 和 e2 进行叉积,也会得到一个指向内部的方向。
Attendees 1 07:51
사각형의 안면 이면 이해됐어요. 다 어렵지 않죠
听众 1 07:51 矩形的正面和反面已经理解了。这都不难,对吧?
Attendees 1 07:59
p1 p2 p3를 이렇게 오른손으로 감았을 때 p1 p2 p3 감면 이쪽 면이 있고 저쪽 면이 있는 거죠.
어느 쪽이 안면이라는 얘기예요? 오른쪽 면이 안면이라는 얘기예요.
听众 1 07:59 当用右手按照 p1 p2 p3 的顺序围绕时,p1 p2 p3 有一个正面和一个反面。哪一面是正面?意思是右边的面是正面。
Attendees 1 08:16
그러면은 이제 바로 기본 객체 아까 뭐가 있다고 했어요?
점선 사각형이 있다고 했었죠. 그래서 점선 사각형을 우리가 이제 윈도우에 출력하기 위한 오픈지의 함수들을 살펴볼 건데 먼저 점을 출력하는 정점 함수에 대해서 한번 살펴볼게요.
정점의 좌표를 지정하기 위해서는 당분간은 GL 버텍스라는 명령어를 쓸 거예요.
그게 좌표를 지정하는 명령어예요. GL 버텍스 한 다음에 별표가 있는 거는 이 별표에는 여러 가지가 올 수 있다는 얘기겠죠.
별표에 올 수 있는 거는 첫 번째 옵션은 2 3 4 중에 하나가 와요.
2가 왔다는 얘기는 2차원 좌표를 지정하겠다는 거고 3이 왔다는 건 3차원 좌표 4가 왔다는 건 4차원 좌표를 지정을 하겠다는 얘기죠.
그다음에 두 번째 오는 거는 isfd isfd isfd하니까 아무튼 i는 뭐예요?
那么现在我们将讨论基本对象,之前提到了什么?点、线、矩形对吧。我们现在将查看 OpenGL 中用于在窗口上输出这些对象的函数,首先将查看绘制点的顶点函数。为了指定顶点坐标,我们暂时将使用 GL Vertex 命令。这是用于指定坐标的命令。GL Vertex 后面的星号表示可以有多种选择。星号后可以是的第一个选项是 2、3、4 中的一个。如果是 2,意味着指定二维坐标;如果是 3,意味着指定三维坐标;如果是 4,意味着指定四维坐标。接下来的是 isfd isfd isfd,总之 i 是什么?
Attendees 1 09:16
데이터 타입인데 인티저 타입으로 주겠다는 얘기고 s는 타입으로 주겠다는 얘기고 f는 플롯 타입, d는 더블 타입으로 주겠다는 얘기예요.
그다음에 v는 올 수도 있고 안 올 수도 있어요. v를 쓰게 되면은 이거 이제 어레이 타입으로 그냥 어레이에 이름을 넘겨주겠다는 얘기예요.
그다음에 v를 안 쓰면은 각각의 좌표를 주겠다는 얘기고 정점의 좌표를 지정하는 함수가 뭐라고 GL 버텍스 별표 함수다라는 거고 이 GL 버텍스 별표 함수는 GL b인과 GL 엔드 사이에 반드시 위치해야 하고 그다음에 내가 점점 점을 그리고 싶으면은 GL 비긴의 좌표를 가지고 뭘 그려라 점을 그려라 이렇게 전달해 주기 위해서는 GL 포인츠라는 상수를 GL 비긴에 전달을 해줘야 돼요.
예제를 보면은 좀 더 쉽게 이해가 될 거예요.
数据类型,意思是用整数类型,s 是用字符类型,f 是浮点类型,d 是双精度类型。然后 v 可以出现也可以不出现。如果使用 v,就是以数组类型传递数组名。如果不使用 v,就是分别给出每个坐标。顶点坐标指定函数就是 GL Vertex 星号函数,这个 GL Vertex 星号函数必须位于 GL Begin 和 GL End 之间。如果要绘制点,需要在 GL Begin 中传递 GL_POINTS 常量。看一个例子会更容易理解。
Attendees 1 10:17
여기 지금은 점의 좌표가 몇 개가 지정이 돼 있어요 GL 버텍스 2is니까 이건 몇 차원 좌표 2차원 좌표죠 정수 타입 2차원 좌표 그래서 50 콤마 100 75 콤마 150, 100콤마 200이라는 점의 위치를 먼저 이렇게 선택을 하고 저희가 50이라고 하고 여기도 50이라고 할게요.
50 콤마 100 하면 이 정도가 되겠죠. 그다음에 75 콤마 150 75콤마 150 하면 더 위에 있는 점이 되고 그다음에 100콤마 200 100콤마 200하면 더 위에 있는 점이 되겠죠.
지금 세 점의 위치만 일단 지정을 한 거고 아직 점을 그린 건 아니에요.
좌표만 지정을 해 준 거예요. 어떤 함수를 이용해서 GL 버텍스 2 i라는 함수를 이용해서 그다음에 이 점의 좌표에다가 이 점의 좌표에다가 내가 점을 그리겠다 하면은 GL 버텍스를 GL 빅인과 GLN 사이에 위치시키고 GL 비기의 프리미티브 기본 객체의 타입을 여기다 적어줘야 돼요.
与会者 1 10:17 这里现在有几个点的坐标被指定了。因为是 GL 顶点 2,这是 2 维坐标,整数类型的 2 维坐标。所以是 50,100,75,150,100,200 这些点的位置首先被选择。我们将这里设为 50,这里也设为 50。50,100 就是这样。接下来 75,150 75,150 会更高一些,然后 100,200 100,200 会更高。现在只是指定了三个点的位置,还没有画点。只是指定了坐标。使用 GL 顶点 2i 函数,然后在 GL 开始和 GL 结束之间放置,并在这里指定基本对象的类型。
Attendees 1 11:20
GL 포인츠 하면은 이 좌표 위로 가서 점을 그리겠다는 얘기예요.
알겠나요? 똑같은 건데 똑같은 결과인데 이번에는 좀 달라졌어요.
뭐가 달라졌나? 아까는 GL 버텍스 2i였는데 이번에 3f로 바뀌었죠.
이거는 3차원 좌표를 지정하겠다는 얘기고 그다음에 얘는 50 콤마 100 콤마 50 이게 x 좌표고 이게 y 좌표고 얘가 제 좌표가 되겠죠.
3차원 공간에다가 점을 찍겠다는 얘기예요. 그다음에 첫 번째 예제하고 동일한 결과를 그릴 텐데 조금 바뀌었어요.
파라미터가 어떻게 GL 멀티스 2i 한 다음에 뭐가 붙었나요?
v가 붙었죠 아까 v는 옵션이라고 했죠. v를 지정할 시에는 이를 어레이에 이름을 넣어주는 거예요.
그 어레이는 어떤 좌표를 가지고 있나? 50 콤마 100 75 콤마 150 100콤마 200이라고 하는 좌표를 배열의 형태로 가지고 있는 거죠.
그래서 p1, p2, p3 배열의 이름은 배열에 뭐예요?
与会者 1 11:20 使用 GL 点意味着在这些坐标上画点。明白了吗?虽然是相同的,但这次有些变化。什么变化?之前是 GL 顶点 2i,这次变成了 3f。这表示要指定 3 维坐标,然后 50,100,50 中这个是 x 坐标,这个是 y 坐标,这个是 z 坐标。意思是在 3 维空间中画点。接下来会绘制与第一个示例相同的结果,但有些变化。参数是什么?GL 多点 2i 之后加了什么?加了 v。之前说 v 是可选的。指定 v 时,需要在数组中放入名称。那个数组包含什么坐标?就是 50,100,75,150,100,200 这些坐标的数组形式。所以 p1,p2,p3 数组的名称是什么?
Attendees 1 12:25
시작 주소죠 그래서 이렇게 넘겨주면은 이 방식과 동일한 효과를 나타내지만 이렇게 v라는 어레이 파라미터를 사용할 수 있다라는 얘기예요.
점 그리는 법 다 알겠어요 점 그리는 법 그다음에 라인 그리는 법 알려줄게요.
오픈 지 라인 함수 양 끝점 라인을 그리려면 이 라인을 그리기 위해서는 점이 몇 개가 필요해요.
두 개가 필요하겠죠. 그래서 두 개의 좌표를 지정해야 돼요.
양 끝점의 좌표를 지정하기 위해서 마찬가지로 어떤 함수를 이용한다 GL 버텍스 별표 함수를 사용을 할 거예요.
좌표를 지정할 때는 GL 버텍스를 쓴다는 거 동일하죠.
그다음에 GL 빅깅과 GLN 사이에 GL 버텍스를 위치시키고 그다음에 여기서 이제 포인트하고 달라지는 게 요 별표 GL 비기 해 주는 상수 값이 세 가지 옵션을 줄 수가 있어요.
어떤 옵션 GL 라인 스 저기 복수부터 해야 돼요. s 아까 포인츠도 s부터 해야 돼요.
与会者 1 12:25 开始地址,所以如果这样传递,会产生相同的效果,但可以使用 v 这样的数组参数。我将告诉您如何绘制点和线。为了绘制 OpenGL 线条函数的两个端点,需要多少个点?当然是两个。因此,您需要指定两个坐标。同样,为了指定坐标,我们将使用 GL 顶点星号函数。当指定坐标时,使用 GL 顶点是相同的。然后,在 GL 开始和 GL 结束之间放置 GL 顶点,接下来与点不同的是,这里的星号 GL 开始可以给出三个选项。与点一样,必须从 s 开始。
Attendees 1 13:35
여러 개의 점들을 한꺼번에 그릴 수 있도록 그다음에 GL 라인 스트립, 라인 스트립 그다음에 GL 라인 루프 이렇게 세 가지 옵션을 줄 수가 있어요.
보면은 여기 보면은 이게 뭐 한 거예요? p1의 좌표는 50 콤마 100, p2의 좌표는 75 콤마 150, p3의 좌표는 100콤마 200 그다음에 p4의 좌표도 있고 p5의 좌표도 있고 있다고 가정을 할게요.
가정할 수 있겠죠 가정을 하고 여기서 뭘 지정해줬어요?
GL 버텍스 2iv를 이용해서 5개의 점유 좌표를 지정을 해줬죠.
그다음에 여기 GL b과 GL 엔드 사이에다 놓고 여기 별표에 값을 넣을 건데 요 별표를 만약에 뭐를 넣으면은 GL 라인스를 넣으면은 이게 어떤 결과가 그려질까요?
GL 라인스라는 얘기는 여기에 나오는 좌표들을 가지고 뭘 그리라는 얘기예요 선을 그리라는 얘기죠.
선을 그리면은 짱이 몇 개가 필요해요 점 두 개가 필요하죠.
앞에서부터 두 개씩 짝을 질 거예요.
与会者 1 13:35 可以同时绘制多个点,然后有 GL 线条条带、线条条带,接着是 GL 线条循环,这三个选项。假设有 p1 坐标为 50,100,p2 坐标为 75,150,p3 坐标为 100,200,还有 p4 和 p5 的坐标。使用 GL 顶点 2iv 指定了 5 个点的坐标。然后放在 GL 开始和 GL 结束之间,在星号处放入值,如果放入 GL 线条,会绘制什么结果?GL 线条意味着用这些坐标绘制线条。绘制线条需要多少个点?当然是两个。将从前面开始两两配对。
Attendees 1 14:44
p1과 p2 이렇게 선을 하나 그리고 그다음에 p3와 p4 이렇게 선을 하나 그리고 p5는 어때요?
짝이 없죠 그럼 얘는 현재 그냥 무시가 돼버려요. 그래서 실질적으로는 이렇게 5개의 점의 좌표를 주고 라인스로 그리시오 하면 라인 몇 개가 그려진다.
두 개가 그려지는 거예요. 그럼 라인스 말고 라인 스트립으로 주면 어떻게 될까 라인 스트립으로 주게 되면은
出席者 1 14:44 从 p1 和 p2 绘制一条线,然后从 p3 和 p4 绘制另一条线,p5 怎么办?它没有配对。所以它实际上就被忽略了。因此,如果给出 5 个点的坐标并要求绘制线段,会绘制多少条线?是两条。那么如果改用线带(Line Strip)会怎样?如果使用线带,
Attendees 1 15:23
p1과 p2를 라인으로 그려요. 그다음에 p2와 p3를 라인으로 그려요.
그다음에 p3와 p4를 라인으로 그려요. 그다음에 p4와 p5를 라인으로 그려요.
그러면은 p1, p2 p2 p3 p3 p4 p4 p5 이렇게 라인 스텝이라는 건 이어서 쭉 연결해서 그리라는 얘기예요.
결국 좌표 5개는 동일해요. 동일한 좌표를 줬지만 여기 객체 타입에 라인스를 주냐 라인 스트립을 주냐에 따라서 그려지는 결과가 달라진다는 얘기죠.
이해됐죠 마지막 옵션 라인 루프를 한번 줘볼게요.
라인 룸을 주면 뭐가 나올까? 처음 전과 마지막 점이 연결이 돼요.
그 얘기는 뭔가 p1과 p2 짝을 짓고 p2와 p3 짝을 짓고 p3와 p4 짝을 짓고 p4와 p5 짝을 짓고 마지막에 p 5하고 p1하고 짝을 짓는다는 얘기예요.
그렇죠 그러면은 이렇게 닫힌 형태의 룩이라는 게 뭐예요?
룩 닫혔다는 얘기죠.
出席者 1 15:23 首先用线连接 p1 和 p2。然后用线连接 p2 和 p3。接着用线连接 p3 和 p4。然后用线连接 p4 和 p5。这就是线带(Line Strip)的意思,就是连续地绘制。总之,5 个坐标是相同的。尽管坐标相同,但根据使用线段(Lines)还是线带(Line Strip),绘制的结果会有所不同。明白了吗?最后让我们看看线环(Line Loop)选项。使用线环会发生什么?首先和最后一个点会相连。也就是说,p1 和 p2 配对,p2 和 p3 配对,p3 和 p4 配对,p4 和 p5 配对,最后 p5 和 p1 配对。这是什么意思?这意味着形状被闭合了。
Attendees 1 16:32
그래서 라인을 그릴 때 이런 거를 쓸 수가 있다는 거죠.
그럼 만약에 이제 원을 그리고 싶다 하면 어떻게 그리면 되나요?
이거는 원은 원은 원의 방정식. 여러분 코사인 세타 사인 세타 이용하면 x 좌표 코사인 x 세타 y 좌표 사인 세타 알죠 그래서 수없이 많은 점들을 많이 한 100개 정도 이렇게 샘플링 할 수도 있겠죠.
이 샘플링된 점들을 뭘로 이으면은 라인들로 쭉 이어주면은 이렇게 하나의 원을 그릴 수가 있게 되는 거죠.
그래서 이번 시간에 여러분 거 한번 실습을 해볼 거예요.
그래서 선까지 선까지 됐고 그다음에 마지막 폴리곤 다각형 함수 사각형의 정점의 좌표는 어떤 함수를 이용해서 지정을 한다.
당연히 g 버텍스를 이용해서 지정을 하면 되죠. 그다음에 사각형의 마찬가지로 GL 비긴과 GL 엔드 사이에 좌표를 지정해 주고 GL 비긴의 객체의 타입을 넣어주면 되는데 여기에 올 수 있는 거는 좀 여러 가지가 있네요.
所以在绘制线条时可以使用这种方法。那么如果想要绘制圆,该如何绘制呢?这是圆的方程。你们知道利用余弦θ和正弦θ可以得到 x 坐标余弦 x θ和 y 坐标正弦θ,所以可以对非常多的点进行抽样,大约 100 个点。通过将这些抽样的点用线连接起来,就可以绘制出一个圆。在这节课中,我们将进行实践。到目前为止,我们已经讨论了线条,接下来最后讨论多边形。如何指定矩形顶点坐标?当然可以使用 g 顶点来指定。然后,在 GL Begin 和 GL End 之间指定坐标,并在 GL Begin 中放入对象类型。
Attendees 1 17:36
어떤 타입 일단 폴리곤 폴리본이라는 타입이 있고 GL 트라잉글스라는 타입이 있고 GL 트라잉글 스트립이라는 타입이 있고 젤 트라잉글 팬이라는 타입이 있고 쿼드라는 타입이 있고 쿼드 스트립이라는 타입이 있네요.
하나, 둘, 셋, 넷, 다섯 여섯개의 타입이 있는데 각각의 타입에 따라서 동일한 좌표가 명시가 되더라도 그려지는 도형이 이제 달라지겠죠.
마찬가지로 그래서 한번 보면은 여기 몇 개의 점을 지정을 했어요.
1, 2, 3, 4, 5, 6, 6개의 점을 지정했죠.
근데 처음에 GL 비긴에 주는 상수를 GL 폴리곤 하게 되면은 p 제로 p1, p2, p3, p4, 5, p 6를 가지고 다각형을 그리라는 얘기예요.
다각형을 그리면 뭐 이런 식으로 이제 도형이 하나 그려지겠죠.
그다음에 GL 트라잉글스를 주게 되면 어떻게 될까요?
GL 트라잉글스 삼각형을 그리기 위해서는 점이 몇 개가 필요해요?
对于类型,首先有多边形类型,GL 三角形类型,GL 三角形条带类型,GL 三角形扇形类型,四边形类型,四边形条带类型。共有五到六种类型,即使坐标相同,根据不同的类型,绘制的图形也会不同。例如,这里我们指定了几个点:1、2、3、4、5、6 共 6 个点。当在 GL Begin 中使用 GL 多边形常量时,表示用 p0、p1、p2、p3、p4、p5、p6 绘制多边形。绘制多边形时,图形就会这样显示。那么如果使用 GL 三角形会怎样?绘制三角形需要多少个点?
Attendees 1 18:41
점이 삼각형은 3개가 필요하겠죠. 3개가 필요하기 때문에 여기서 짝을 지는데 몇 개씩 짝을 지을까?
3개씩 짝을 짓겠죠. 당연히 다들 재밌는 걸 하나 봐 바쁜가 봐 그렇죠 아니에요.
집중하고 있어요. 세 개의 짝을 지으면 1번, 2번 3번 1번 2번 3번으로 삼각형을 하나 그려요.
그다음에 4번, 5번 6번으로 4번, 5번 6번으로 또 삼각형을 그리겠죠.
여기서 중요한 거 우리는 지금 이걸 첫 번째 삼각형이라고 하고 이걸 두 번째 삼각형이라고 하면은 첫 번째 삼각형의 앞면을 보고 있을까요?
뒷면을 보고 있을까요? 1번 2번 3번을 오른손으로 감았을 때 안면을 보고 있는 거죠.
그다음에 4번, 5번 6번도 오른손으로 가보면은 안면을 보고 있는 거죠.
우리가 이쪽이 앞면이니까 삼각형의 앞면과 뒷면이 있는데 이쪽으로 지칭하고 있으니까 앞면을 보고 있는 거죠.
그래서 두 가지 옵션은 끝났어요. GL 폴리곤과 GL 트라이앵글 그다음에 트라이앵글 스트립은 예상을 하던데 뭘 것 같아요?
出席者 1 18:41 三角形需要 3 个点。因为需要 3 个点,所以在这里配对,每次配对几个?每次配对 3 个。当然,大家都在看一些有趣的东西,看起来很忙,对吧?不,他们都在专注。将三个点配对,1 号、2 号、3 号,1 号、2 号、3 号画一个三角形。然后,4 号、5 号、6 号,4 号、5 号、6 号再画一个三角形。在这里重要的是,我们现在称第一个为第一个三角形,第二个为第二个三角形,我们是在看第一个三角形的正面还是反面?用右手环绕 1 号、2 号、3 号时,我们看到的是正面。然后,4 号、5 号、6 号用右手环绕时也是看到正面。因为我们指的是这一面,所以是正面。所以这两种选择已经结束了。GL 多边形和 GL 三角形,接下来是三角形条带,预计会是什么?
Attendees 1 20:01
트라잉글 스트립은 아까 GL 라인 스트립이 어떻게 됐어요?
선분을 쭉 이어서 그렸죠. 트라잉글 스트립도 아마 앞에 삼각형 그리면은 한 점만 더 주어지면은 두 번째 사각형 그릴 수 있죠.
점이 3개에다가 무슨 얘기냐 하면은
出席者 1 20:01 三角形条带和之前的 GL 线条条带是一样的吗?线段连续画。三角形条带可能是,当绘制第一个三角形后,再给一个点,就可以绘制第二个三角形。三个点说的是什么意思
Attendees 1 20:24
다음 슬라이드를 보죠. 이번에 트라잉글 스트립으로 트라잉글 스트립으로 똑같이 p1 p2 p3 p4 5 6 동일한 동일한 순서가 아니네.
동일한 순서가 아닌데 여기 트라임을 스트립 하면은 1번 2번 6번으로 즉
让我们看看下一张幻灯片。这次使用三角形带,三角形带,使用 p1 p2 p3 p4 5 6,顺序不同。顺序不同,但是如果用三角形带绘制,就是 1 号、2 号、6 号。
Attendees 1 21:00
결국 하고 싶은 건 뭐냐 하면은 1번 삼각형 2번 삼각형 3번 삼각형 4번 삼각형 4개의 사각형을 그리고 싶은 거예요.
그런데 점의 배열이 1, 2, 3, 4, 5 6의 좌표가 이렇게 명시가 돼 있다고 가정을 할 거예요.
그리고 트라잉을 스트립으로 그리겠다는 얘기예요.
이거 트라잉글 스트립으로 그리려면 첫 번째 삼각형은 몇 번 몇 번 몇 번 1번 2번 6번으로 그리면 되겠죠 1번 2번 6번 이렇게 하나를 그리면 돼요.
그다음에 두 번째 삼각형은 누구를 공동으로 이용을 하면 좋을까?
첫 번째 삼각형 그 첫 번째 삼각형과 두 번째 삼각형이 이렇게 하나의 에지를 기준으로 붙어 있죠.
그럼 재활용할 수 있는 버텍스가 뭐가 뭐를 재활용할 수 있어요?
2번과 6번을 재활용할 수가 있죠 그래서 2번 6번 몇 번 3번 2번 6번 3번 근데 여기서 1번 사각형은 우리가 앞면을 보고 있죠.
근데 2번 사각형은 앞면을 보고 있을까요? 뒷면을 보고 있을까요?
最终我想要做的是绘制 4 个三角形组成的四边形。假设点的数组是 1、2、3、4、5、6 的坐标,并且要用三角形带绘制。如果用三角形带绘制,第一个三角形就是用 1 号、2 号、6 号来绘制。那么第二个三角形可以重复利用哪些顶点呢?第一个三角形和第二个三角形是共享一条边的。所以可以重用的顶点是 2 号和 6 号。因此可以使用 2 号、6 号、3 号。但是第一个四边形我们是正面朝向的,那么第二个四边形是正面朝向还是背面朝向呢?
Attendees 1 22:09
뒷면을 보고 있는 거죠. 이렇게 오른손으로 감싸면은 엄지손가락이 안으로 들어가니까 하지만 이렇게 이렇게밖에 못해요.
왜 1번 삼각형에서 2번 6번 순으로 지정이 됐기 때문에 2번 6번을 그대로 이용해서 다음 삼각형을 지정하기 위해서는 한 번은 안으로 들어가야 되겠죠.
그래서 GL 트라잉글 스트립으로 그릴 때는 앞면 뒷면 앞면 뒷면 이렇게 번갈아가면서 해주면은 결과를 얻을 수가 있어요.
다음 3번 사각형은 뭘로 그리면 되나? 6번 3번 5번으로 그리면 되겠죠.
6번 3번 5번 얘는 또 앞면이네. 얘는 프론트고 얘는 백이 되고 얘는 프론트가 되고 그다음에 마지막 사각형은 3번 5번 4번으로 그리면 되겠죠.
3번 5번 4번 얘는 다시 이제 백이 되네요. 그래서 프론트 백 프론트 백 이렇게 번갈아가면서 지정이 되지만 오픈 지에서 GL 트라잉글 스트립으로 볼 때는 이런 것들을 다 그냥 앞면으로 생각을 해요.
听众 1 22:09 正在看背面。当用右手包裹时,拇指会向内,但只能这样做。为什么?因为在第 1 个三角形中,以 1、2、6 的顺序指定,为了使用 2 和 6 指定下一个三角形,必须向内转一次。因此,在使用 GL 三角形条带绘制时,可以通过正面、背面、正面、背面交替来获得结果。下一个第 3 个四边形应该如何绘制?可以用 6、3、5 绘制。6、3、5 是正面。这是正面,这是背面,然后是正面,最后一个四边形可以用 3、5、4 绘制。3、5、4 又变成了背面。所以正面和背面交替指定,但在 OpenGL 的三角形条带中,它们都被视为正面。
Attendees 1 23:20
이 두 번째 삼각형 지정하면서 안면으로 지정할 수 있는 트랙을 스트립에서는 앞면으로 지정할 수 있는 방법이 없어요.
그렇죠 그거는 앞면 뒷면 크게 신경 안 써도 된다라는 얘기예요.
그다음에 트라잉글 팬이라는 게 있어요. 트라잉글 팬, 트라앵글 팬이 어디 있었나?
트라이앵글이 있었고 트라이앵글 스트립이 있었고 트라앵글 팬이 여기 있죠.
그래서 트라잉글 팬까지 하면은 두 개만 나오네요.
코드하고 코드 스트립만 트라잉글 팬은 1번 2번 3번 4번 이렇게 그림을 그리고 싶을 때예요.
어떻게 했나 볼까요? 1번 2번 3번으로 사각형 하나 그리죠.
그다음에 1번이 기준이 돼서 계속 새로운 두 개씩 짝을 지을 거예요.
그다음에 2번 1번이 기준이 되니까 이번에는 1번 2번 3번이 아니라 1번 몇 번 몇 번 1번 2번 3번이 아니라 1번 3번 4번 됐나요?
그다음에 1번 4번 5번 됐나요?
听众 1 23:20 在指定第二个三角形时,在三角形条带中没有指定正面的方法。也就是说,不必太在意正面和背面。接下来是三角形扇。三角形扇,三角形扇在哪里?之前有三角形和三角形条带,现在有三角形扇。那么只剩下两种:代码和代码条带,三角形扇是用于想要以 1、2、3、4 这样的顺序绘制图形。让我们看看是如何做的?先用 1、2、3 绘制一个四边形。然后以 1 为基准,继续配对两个点。接下来以 2 为基准,这次不是 1、2、3,而是 1、3、4,对吗?然后是 1、4、5,对吗?
Attendees 1 24:35
그다음에 1번 5번 6번 이런 형태로 이런 형태로 삼각형을 명시해 주는 게 이제 트라잉글 팬이에요.
펜 그러니까 부채처럼 이렇게 쭉 돌아가면서 하겠다는 얘기죠.
接下来,以 1、5、6 这样的形式来指定三角形,这就是所谓的三角形扇(triangle fan)。意思是像扇子一样,围绕着转动。
Attendees 1 24:56
자 그다음에 코드라는 게 있어요. 코드 GL 코드라는 건 사각형 전문이에요.
사각형 그러니까 트라잉글은 삼각형이고 코드는 사각형이고 그다음에 폴리곤은 일반적으로 n각형 다각형 오각형도 되고 육각형도 되고 그래서 마찬가지로 8개의 점이 지정이 돼 있는데 점의 위치가 이렇게 1번 2번 3번 4번 5번 6번 7번 8번의 위치를 지정을 했다고 가정을 할게요.
그래서 그리고 코드를 코드를 여기다 전달을 하면은 이게 첫 번째 사각형 이게 두 번째 사각형이라고 할게요.
두 번째 사각형이라고 하면은 첫 번째 사각형을 그리기 위해서는 몇 번 몇 번 하면 되나 1 2 3 4 하면 되겠죠 1 2 3 4 마찬가지로 사각형 그리려면 점이 몇 개가 필요해요?
4개가 필요하죠. 기본적으로 4개씩 짝을 지어서 그림을 그리겠다는 얘기예요.
두 번째 사각형은 5번 6번 7번 8번이죠. 5 6 7 8 이렇게 되는 거고 이거는 다 앞면을 보고 있죠.
接下来是代码,GL 代码是专门处理四边形的。三角形是三角形,代码是四边形,而多边形通常是 n 边形,可以是五边形、六边形等。假设有 8 个点,位置分别是 1、2、3、4、5、6、7、8 号。将代码传递给它,这是第一个四边形,这是第二个四边形。要绘制第一个四边形,需要使用 1、2、3、4 号点,绘制四边形基本需要 4 个点。第二个四边形使用 5、6、7、8 号点。这些都是面向正面的。
Attendees 1 26:07
그래서 따로따로 그릴 때는 다 안면을 보도록 지정해 줄 수가 있어요.
반면에 스트립으로 그릴 때는 어떻게 돼요? 스트립으로 그릴 때는 뭘 재활용할 수가 있나요?
마지막 앞에 삼각형의 앞에 사각형의 마지막 엣지를 재활용할 수가 있겠죠.
그러면은 이번에는 순서가 어떻게 됐나 1 2 3 4 5 6 7 8 좌표는 똑같네요.
좌표는 똑같은 거고 이번에는 코드 스트립을 여기다 전달할 건데 이런 1번 2번 3번 사각형을 그리기 위해서는 이 좌표를 어떤 순서대로 명시를 해줘야 될까 코드 스트립을 이용해서 1번 2번 3번 4번 그려요.
이건 이렇게 그리네요. 1번 2번 4번 3번 5번 6번 8번 7번 이런 식으로 코드 스트립 할 때는 이렇게 이렇게 이렇게 이렇게 이렇게 그려주면은 얘네가 코드 스트립 형태로 연결이 된다는 거예요.
알겠어요 각각의 상수마다 뭔가 좀 지정해 주는 방식이 있죠.
所以在单独绘制时,可以指定所有面都朝向观察者。相反,当使用条带绘制时会怎样呢?在条带绘制时可以重复利用什么?可以重复利用最后一个三角形前面的矩形的最后一条边。那么这次顺序是怎样的?1 2 3 4 5 6 7 8 坐标是相同的。坐标是相同的,这次我将传递条带代码,为了绘制 1、2、3、4 个矩形,我需要以什么顺序指定这些坐标?使用条带绘制 1、2、3、4。它是这样绘制的:1 2 4 3 5 6 8 7 这种方式,当使用条带绘制时,这样这样这样这样这样绘制,它们就会以条带的形式连接在一起。明白了吗?每个常数都有一种指定方式。
Attendees 1 27:19
그래서 그 방식을 여러분이 이해를 하면 될 것 같은데 대부분 뭐만 쓸까요?
여기서 GL 코드 GL 쿼드 스트립 잘 안 써요.
所以,如果你理解了这种方式,大多数情况下会使用什么?在这里,GL 代码 GL 四边形条带基本上不会使用。
Attendees 1 27:30
주로 트라잉글 제일 많이 쓰는 게 제일 트라잉글스를 써요.
트라잉글스 삼각형으로 그리는 표현하는 대부분의 객체들이 이제 삼각형으로 그려지기 때문에 그냥 GL 트레인 그레스를 많이 쓰고 그다음에 뭐 GL 라인이나 라인 스트립은 곡선 같은 거 그릴 때 많이 사용을 하겠죠.
参会者 1 27:30 主要使用三角形,最常用的是三角形。因为大多数对象都是用三角形来绘制和表达的,所以经常使用 GL 三角形,然后对于像曲线这样的东西,会多使用 GL 线或线条带。
Attendees 1 27:55
그래서 기본적인 객체가 점이 있고 선이 있고 다각형이 있고 그럴 때 점선 다각형을 그리는 오픈 젤 함수들에 대해서 소개를 한 거예요.
알겠어요 그다음에 이제 그럼 실제 그리는 건 알겠어요?
함수 호출하는 방법은 알겠는데 여러분이 바라보는 스크린은 어떤 그걸 뭐라고 했죠?
윈도우가 갖는 거를 칼랍 버퍼라고 했죠. 칼라 버퍼 칼라 버퍼는 정수 좌표를 갖는 거예요.
정수 좌표 배열이니까 우리 지난 시간에 600바위 600짜리 윈도우 만들었죠.
그러면 칼라 워프가 어떻게 된다고 했어요? 600바이 600 그다음에 rgba에서 6604짜리 배열이 잡힌다고 했었죠.
그래서 각각의 배열의 좌표들은 다 정수예요. 정수 정수 값을 갖기 때문에 그게 이제 레스터화라는 개념이 필요한데 레스터와는 기본 객체를 정추저표를 갖는 스크린.
여기서 말하는 스크린은 이제 칼라 버퍼를 얘기하는 거죠.
칼라 버퍼에 실제 그리는 과정이에요. 실제 그리는 거죠.
参会者 1 27:55 所以我介绍了基本对象,包括点、线和多边形,以及用于绘制点、线和多边形的 OpenGL 函数。好的,那么现在我们知道了如何绘制?知道了如何调用函数,但你们看到的屏幕是什么?我们称之为颜色缓冲区。颜色缓冲区是具有整数坐标的。它是一个整数坐标数组,就像我们之前创建的 600x600 的窗口。那么颜色缓冲区会怎样?600x600,然后是 RGBA 的 6604 数组。因此,每个数组坐标都是整数。正是因为是整数值,所以需要光栅化的概念。光栅是指具有整数坐标的屏幕。这里说的屏幕是指颜色缓冲区。这是实际绘制的过程,真正的绘制。
Attendees 1 29:02
우리가 아무리 여기 잘 GL 비긴 해서 라인을 잘 그렸다 하더라도 이 라인들이 최종적으로는 어디에 그려져야 돼요?
이제 여러분 스크린에 그려져야 되는 거죠. 스크린에 그려져야 되는데 문제는 이 시작점과 끝점은 실수 좌표가 될 수 있는데 중간에 라인이 통과하는 좌표들도 실수 좌표가 될 수 있죠.
슬롭에 따라서 기울기에 따라서 시수 좌표가 나올 수 있는데 내가 그려야 되는 거는 모든 종이 정수예요.
그러다 보면 알맞은 칸에 색칠을 해야겠죠. 그거를 빨리 그리는 방법 그게 이제 레스터화 방식이에요.
레스터화 기법 기본 객체의 모든 점은 정수 좌표를 갖는 가까운 픽셀의 좌표로 반올림 돼서 그려져야 된다라는 게 기본 원칙인데 3차원 장면은 다양하고 많은 수의 출력 객체들이 포함이 돼 있죠.
그래서 이런 것들을 삼각형 하나 그리는 거는 괜찮아요.
직선 하나 그리는 건 괜찮은데 삼각형이 200만 개가 된다 하면은 반올림이나 하는 것도 부담이 되는 거예요.
无论我们在这里绘制 GL 和线条多么出色,这些线条最终都必须绘制在哪里?现在它们必须绘制在您的屏幕上。问题是起点和终点可能是浮点坐标,线路经过的中间坐标也可能是浮点坐标。根据斜率,可能会出现浮点坐标,但我需要绘制的是所有点都是整数。因此,我们需要在适当的单元格中着色。快速绘制的方法就是光栅化方法。光栅化技术的基本原则是所有基本对象的点都必须四舍五入到最近的像素坐标来绘制。三维场景包含多样和大量的输出对象。绘制一个三角形是可以的,绘制一条直线也是可以的,但如果有 200 万个三角形,那么四舍五入等操作就会成为负担。
Attendees 1 30:05
그래서 최대한 어떤 연산으로만 그림을 그려야 되나 최대한 정수 연산으로만 그림을 그릴 수 있어야 돼요.
플러팅 포인트 연산 쓰면 안 된다는 얘기죠. 그러므로 각각의 출력 객체에 대해서 뭔가 빠르고 효율적인 레스터와 기법을 공부를 해야 된다라는 얘기고, 이게 지금 지금 보는 게 모는 종이에 여기를 시작점으로 하고 여기를 끝점으로 했을 때 선 선을 그린 거예요.
라인을 라인을 그렸을 때 시작점과 끝점을 쭉 연결하면 이렇게 그려지는데 이 검은 선은 사실 이제 이상적인 공간의 선이죠.
이거를 어디에서 정수 저 혈관을 스크린에서 그리려면은 이런 픽셀들을 우리가 선택을 해서 색칠을 하고 어떻게 눈을 지긋이 감고 멀리서 보면 이게 뭐처럼 보여요?
이제 선분처럼 보이죠. 직선처럼 물론 하나의 픽셀이 이렇게 크지는 않아요.
이렇게 크지 않기 때문에 이렇게 막 티가 나지 계단식으로 티가 나지는 않는데 그래도 이걸 엔티엘리어싱이라고 하죠.
因此,我们必须尽可能仅使用整数运算来绘制图像,也就是说不能使用浮点运算。这意味着我们需要为每个输出对象研究快速高效的光栅化技术。这里我们从起点到终点绘制一条线。当我们连接起点和终点时,这条黑线实际上是理想空间中的线。要在屏幕上用整数绘制这条血管,我们需要选择并着色这些像素。当我们眯着眼睛从远处观察时,它看起来像什么?现在看起来像一条线段。当然,一个像素不会这么大。因为像素不会这么大,所以不会出现明显的阶梯状锯齿,但我们仍称之为抗锯齿。
Attendees 1 31:10
이런 효과를 계단 지그지그지그지그 그런 식으로 표현되는 거를 엘리어싱을 최대한 없애야 돼요.
그래서 우리가 배우는 게 이제 레스터와 기법 중 여러 가지가 있는데 가장 대표적인 하나 하나만 공부하고 넘어갈 거예요.
또 그냥 안 하고 넘어가면 섭섭해서 하나만 할 건데 라인 그리기 알고리즘만 살펴보도록 할게요.
입력 입력은 양 끝점이에요. 양 끝점 양 끝점이 주어진 라임의 레스터화 기법 여기 예를 들면은 2 콤마 3 이게 시작점이고 그다음에 끝점은 8 콤마 6으로 이렇게 주어진 거예요.
됐나요? 그다음에 이 라인을 쭉 연결하면은 라인과 오버랩 되는 픽셀들이 나오겠죠.
그러면 어떻게 색칠을 해야 될까? 여기 이제 여기 오른편 그림은 여기도 색칠을 하고 어쨌든 라인이 통과하는 모든 픽셀들을 찾아서 이렇게 다 색칠해 주는 방법도 있을 거예요.
参会者 1 31:10 这种效果会以锯齿状的形式表现出来。所以我们需要尽量消除锯齿。在我们学习的光栅化技术中,有很多种方法,现在我们将只学习其中最具代表性的一种。我们不直接跳过,而是稍微介绍一下线条绘制算法。输入是两个端点。例如,起始点是 2,3,终止点是 8,6。明白了吗?然后连接这条线,会覆盖一些像素。那么我们应该如何着色呢?右侧的图示展示了可以通过找出线条经过的所有像素并进行着色的方法。
Attendees 1 32:12
그렇죠 근데 이거는 별로 안 좋고 브레지의 알고리즘을 우리가 미드 포인트 알고리즘이라고도 해요.
미드 포인트 알고리즘인데 정신 바짝 차려야지 이해할 수 있어요.
어려우니까 사실 어렵진 않아요. 시작점과 끝점이 주어졌다고 가정할게요.
시작점을 x 좌표 y 좌표인데 스타트 포인트에서 여기 s라고 표현을 하고 그다음에 끝점을 xe 콤마 ye라고 표현을 할게요.
됐나요? 그럼 델타 x는 뭘까? x 좌표의 차이 누구에서 누구 빼주면 돼요?
x2에서 sx 빼주면 되겠죠 가정하기를 이제 얘 끝점이 오른쪽 위에 있다고 가정을 할게요.
그다음에 델타 y는 델타 y는 ye에서 ys를 빼주면 되겠죠.
그다음에 기울기가 0부터 1 사이에 있다고 가정을 할 거예요.
그러면 기울기는 어떻게 구할 수가 있어요? 델타 x 분의 델타 y가 되겠죠 그래서 기울기가 1을 기준으로 이게 1이에요.
1을 기준으로 이거보다 어떻게 된다 작게 된다라고 가정을 할 거예요.
参会者 1 32:12 是的,但这并不是很好。我们称之为布雷森汉算法,也称为中点算法。这个算法需要高度集中注意力才能理解,虽然看起来很复杂,其实并不难。假设我们有起始点和终止点。起始点的坐标为 xs 和 ys,终止点的坐标为 xe 和 ye。明白了吗?那么δx 是什么?是 x 坐标的差值,从 x2 减去 sx。现在假设终止点在右上方。δy 是从 ye 减去 ys。然后我们假设斜率在 0 到 1 之间。斜率如何计算?是δx 除以δy。以 1 为基准,我们将讨论斜率大于或小于 1 的情况。
Attendees 1 33:25
1보다 크면은 1보다 작은 알고리즘 구한 다음에 대칭시키면 돼요.
마찬가지로 기울기가 음수면은 요거 하나만 알고리즘을 잘 짜놓으면은 대칭시키고 하면 회전시키고 하면은 똑같은 방식을 쓸 수가 있어요.
如果大于 1,则找出小于 1 的算法,然后进行对称。同样,如果斜率为负,只要精心编写算法,就可以进行对称、旋转等操作。
Attendees 1 33:49
현재 위치를 xk 콤마 yk라고 할게요. 여기가 현재 위치예요.
현재 위치 됐나요? 아주 간단해요. 기울기가 1보다 작기 때문에 1보다 작거나 같기 때문에 그냥 x 좌표는 한 칸씩 증가만 시킬 거예요.
기울기가 1보다 크면은 뭘 증가시키면 되나 y 좌표를 한 칸씩 증가시키고 x 좌표를 찾아내면 되는 거고 기울기가 1보다 작으면은 x 좌표는 무조건 한 칸씩 증가를 하고 다음 픽셀에서 다음 픽셀에서 노란색을 택해야 될까요?
회색을 택해야 될까요? 끝점은 0이라고 가정을 할게요.
한 스텝 넘어가서 노란색이에요. 회색이에요. 회색이죠 여기는 여기를 택할 거고 그다음에 또 x 좌표 하나 증가시켰어요.
그럼 y 좌표는 이번에는 1번을 택할까요? 2번을 택할까요?
1번이겠죠 그다음에 또 하나 증가했어요. y 자 표는 얘를 택할까요?
얘를 택할까요? 밑에 거 택하는 거죠. 얘는 얘 그다음에 얘는 이건 좀 애매하네요.
그렇죠 아래 픽셀에도 살짝 걸쳐 있고 위에 픽셀에 좀 더 많이 걸쳐 있어요.
让我们将当前位置称为 xk 和 yk。这就是当前位置。位置清楚了吗?很简单。因为斜率小于 1 或等于 1,所以我们只需逐步增加 x 坐标。如果斜率大于 1,该增加什么呢?增加 y 坐标,然后找出 x 坐标。当斜率小于 1 时,x 坐标必须逐步增加,下一个像素选择黄色还是灰色?假设终点为 0。跨越一步后是黄色还是灰色?灰色。这里我们选择这个,然后再增加一个 x 坐标。这次选择 1 号还是 2 号 y 坐标?显然是 1 号。再增加一个后,y 坐标选择上面的还是下面的?选择下面的。这个有点模糊。对,它略微跨越了下方像素,但更多地覆盖了上方像素。
Attendees 1 35:05
그냥 위에 택하는 게 맞겠죠 이렇게 요렇게 그래서 이렇게 x는 그대로 하나씩 매 스텝마다 하나씩 전진을 하고 y 좌표는 x가 하나 증가하면 y는 같은 값을 택할 건지 아니면 하나 위에 거를 택할 건지 둘 중에 하나만 선택을 하면 되는 거예요.
매 스텝마다 그게 브레지n 알고리즘의 핵심이에요.
기울기가 1보다 작았다고 가정하기 때문에 x는 무조건 하나씩 증가하는 거고 y는 x만 앞으로 갈지 아니면 y도 위로 갈지 그것만 결정해 주면 되는 거죠.
만약에 기울기가 정확하게 1이다 그러면 어떻게 돼야 돼요?
기울기가 1이면 정확하게 이렇게 나가는 거죠. 이럴 때는 x도 증가하고 y도 증가하고 x도 증가하고 y도 증가하고 증가 증가 증가 증가하면 되는데 지금 기울기가 1보다 작기 때문에 x는 증가하지만 y는 증가할까 말까를 결정을 해줘야 된다는 얘기예요.
그래서 현재 위치가 이렇게 되면은 우리한테 주어진 선택은 요거 아니면 요건데 요거의 의미는 뭐예요?
与会者 1 35:05 就直接选择上面的那个就对了,就是这样。所以 x 每步都向前推进一个,y 坐标是在 x 增加一个时选择保持相同的值,还是选择上面的值,只需要二选其一。这就是 Bresenham 算法的核心。因为假设斜率小于 1,所以 x 每次都会增加,而 y 只需要决定是保持在原位还是向上移动。如果斜率恰好是 1,会怎么样呢?斜率为 1 时会正好这样前进。这种情况下 x 和 y 都会增加,但现在斜率小于 1,所以 x 在增加,而 y 是否增加还需要决定。所以当前位置是这样时,我们有两个选择,这两个选择是什么意思呢?
Attendees 1 36:13
xk 플러스 원 콤마 yk는 그냥 앞으로 나가겠다는 얘기죠.
이거의 의미는 뭐예요? xk 플러스 1 콤마 yk 플러스 1은 앞으로 나가서 하나 위로 올라가겠다는 얘기예요.
현재 위치가 여기고 그냥 앞으로 나가면 여기고 그다음에 앞으로 나가서 하나 올라가면 여기죠.
그다음 위치는 여기서 이걸 선택할지 이걸 선택할지의 문제죠.
만약에 이걸 선택했다고 하면 다음 위치는 둘 중에 하나고 내가 이걸 선택했다고 하면 다음 위치는 둘 중에 하나죠.
이런 식으로 선택 바이너리 형태로 선택을 하는 게 알고리즘의 핵심이 되는 거고 이거를 알고리즘적으로 표현을 하려면은 이런 과정을 거쳐야 돼요.
직선 y는 mx 플러스 b라고 할게요. 이거를 음함수 표현으로 바꾸면은 음함수 표현으로 바꾸면은 y 대신에 FX 콤마 y라고 놓고 그대로 mx 마이너스 y가 이쪽으로 넘어가는 거죠.
mx 마이너스 y 플러스 b가 되고 여기서 m은 뭐예요?
기울기죠 앞에서 설명했던 걸 놓으면은 델타 x분 델타 y가 될 거예요.
与会者 1 36:13 xk 加 1,yk 就是直接向前前进。这是什么意思?xk 加 1,yk 加 1 是向前并向上一步。当前位置在这里,直接向前是这里,然后向前并向上是这里。下一个位置就是在这两个中选择。如果选择了这个,下一个位置就是这两个中的一个。这种二元选择是算法的核心,要用算法表达这个过程需要这样进行。直线可以表示为 y = mx + b。如果转换为隐函数表达,就是将 y 替换为 F(x,y),变成 mx - y,然后 mx - y + b。这里的 m 是什么?就是斜率,按照之前解释的,会是Δx 除以Δy。
Attendees 1 37:29
됐나요? 그러면은 어떤 x하고 y를 여기다 넣었는데 그 값이 FA 값이 0보다 크다면은 이 점은 직선의 위쪽에 있는 걸까요?
아래쪽에 있는 걸까요? f에다가 x코마 y를 넣었는데 그 값이 0보다 크다.
FX 컴마 y가 0보다 크다는 얘기는 mx 마이너스 y 더하기 b가 0보다 크다는 얘기죠.
그러면은 결국은 y만 욜로 넘어지면 mx 플러스 b가 y보다 y가 얘보다 작다는 얘기니까 직선이 아래쪽에 있다는 얘기죠.
됐나요? 양수가 나오면 뭐라고? 함수 값이 양수가 나오면 직선 아래쪽에 있다는 얘기예요.
함수 값이 양수가 나오면 직선 아래쪽에 있다는 얘기고 함수 값이 음수가 나오면 직선 위에 있다는 얘기죠.
됐나요? 거기까지만 이제 잘 파악하면 되겠죠. 그다음에 함수 값이 0이 나오면은 0이 나오면 직선상에 있다는 얘기고 그래서 이게 기본이고 이거하고 요거만 잘 양수가 나오면 아래 음수가 나오면 위 요것만 잘 판단을 하고 있으면 돼요.
参会者 1 37:29 好了吗?那么,如果在这里放入某个 x 和 y,并且 FA 值大于 0,这个点是在直线的上方还是下方?如果在 f 中放入 x 和 y,其值大于 0。意味着 FX 和 y 大于 0,也就是说 mx 减 y 加 b 大于 0。那么,最终 y 越过此值,mx 加 b 小于 y,意味着直线在下方。明白了吗?如果是正数,那是什么?函数值为正数意味着直线在下方。函数值为正数意味着直线在下方,函数值为负数意味着直线在上方。明白了吗?只要掌握到这里就可以了。接下来,如果函数值为 0,那就意味着在直线上。这是基本原则,只要能正确判断正数在下、负数在上就可以了。
Attendees 1 38:39
브리즈맨 알고리즘을 리드 포인트 알고리즘이라고 하는 이유는 바로 중간점의 부호를 조사하기 때문이에요.
중간점 현재 점이 여기예요. xk 콤마 yk 그다음에 다음 점은 두개의 옵션이 있다고 했죠.
앞으로만 갈지 아니면 앞으로 가서 위로 올라갈지 그럼 이 두 개의 중간점의 좌표는 얼마일까?
요 점과 요 점의 중간점의 좌표는 당연히 x는 하나 증가하겠죠.
y는 하나 증가하면 노란색이고 0.5만 증가하면 이 중간점이 되는 거죠.
그래서 이 중간점의 좌표가 xk 더하기 1 콤마 yk 더하기 0.5예요.
이거를 어디다 넣는 거예요? 함수식에다 넣는 거예요.
어떤 함수식 여기다 함수식에다 넣어가지고 그 값이 0보다 작으면 어떤다고 했어요?
작으면은 위쪽에 있다고 했죠. 중간점이 위쪽에 있다는 얘기예요.
중간점에 빨간색 선을 기준으로 위쪽에 있으면은 어떤 점을 택해줘야 되나 중간점이 위쪽에 있으니까 당연히 아래쪽 픽셀을 택해줘야겠죠.
参会者 1 38:39 布雷森汉算法之所以称为点算法,是因为它会调查中间点的符号。当前点是 xk,下一个点有两个选择:是直接向前还是向前并向上。那么这两点的中间点坐标是多少?这两点的中间点坐标当然 x 增加 1,y 增加 0.5 就是这个中间点。所以中间点坐标是 xk 加 1,yk 加 0.5。这要放在哪里?放在函数式中。放入函数式后,如果值小于 0,会怎么样?小于 0 时在上方。意味着中间点在红色线的上方。中间点在上方时,自然应该选择下方的像素。
Attendees 1 39:45
그럴 때는 xk 더하기 1 콤마 yk니까 그냥 앞으로만 간정을 선택을 하겠다는 얘기예요.
됐나요? 중간점이 0보다 크면은 중간점이 0보다 크면은 라인이 직선이 어떻게 된다는 얘기예요.
이 중간점 위쪽으로 간다는 얘기죠. 그럴 때는 어떤 점을 택해 줘야 돼요?
위에 점을 택해줘야 되는 거죠. 그 중간점이 0보다 크면은 x도 하나 증가시키고 y도 하나 증가시킨 점을 택해야 된다라는 거죠.
이게 브레지n 알고리즘의 핵심인데 그래서 이거를 이거를 우리가 판별식이라고 부를 거예요.
판별식 디터미넌트 디시전을 내기 들면 식이라고 해서 판별식의 정의.
원래 함수 FX 콤마 y는 mx 마이너스 y 더하기 b였어요.
근데 m은 뭐 분의 뭐로 표현할 수 있나 델타 x 분의 델타 y로 표현할 수 있죠.
그래서 델타 x 분의 델타 y 곱하기 x 마이너스 y 더하기 b 이게 이제 직선의 방정식이고 dk는 한 별씩 디시전 내지는 dk예요.
dk는 f에다가 얼마 집어넣으라고 했어요.
参会者 1 39:45 那个时候是 x 加 1,即 yk,就是说只选择向前走。明白了吗?如果中间点大于 0,那么直线会怎么样?这意味着中间点在上方。那么这时候应该选择哪个点呢?应该选择上面的点。也就是说,如果中间点大于 0,就要选择 x 和 y 都增加 1 的点。这是 Bresenham 算法的核心,所以我们把它称为判别式。判别式(Determinant Decision)。原来的函数 FX,y 是 mx 减 y 加 b。但 m 可以用 delta x 除以 delta y 表示。所以 delta x 除以 delta y 乘以 x 减 y 加 b,这就是直线方程,dk 是每次决策或 dk。
Attendees 1 41:00
중간점 집어넣으라고 했죠. 중간점은 x 좌표는 하나 증가해야 되고 y 좌표는 반만 증가하면 되죠.
저 점을 집어넣고 그냥 집어넣으면은 실수 연산이 생겨서 여기다가 뭘 곱해줄까 2의 델타 x를 곱해줄게요.
2의 델타 x를 곱해도 우리가 결국 중요한 건 뭐예요?
얘의 부호죠. 부호 부호만 알면 되니까 2의 델타 x를 곱하면은 기울기가 실수이기 때문에 곱해주는 거예요.
기울기를 없애려고 그러면 2의 델타 x 곱하기 델타 x 분의 y
参会者 1 41:00 要把中间点代入,x 坐标需要增加 1,y 坐标只需增加一半。如果直接代入会出现实数运算,所以我们要乘以什么呢?乘以 2 的 delta x。即使乘以 2 的 delta x,我们最关心的是什么?是它的符号。因为斜率是实数,所以乘以 2 的 delta x 来消除斜率,就是 2 的 delta x 乘以 delta x 除以 y。
Attendees 1 41:43
요게 x 좌표가 되는 거고 이게 y 좌표가 되는 거고 요 x 좌표가 어디에 들어가나 이 x 값에 여기에 들어가는 거고 y 자트는 여기에 들어가게 되겠죠.
그러면 델타 x 분의 델타 y 곱하기 2 xk 더하기 1 그다음에 y 대신에 마이너스 yk 더하기 0.5가 되겠죠.
그다음에 플러스 b 그대로 쓰고 그다음에 여기다가 이 델타 x를 곱해줬으니까 얘하고 얘하고 약혼이 되겠네요.
그렇죠 그러면은 첫 번째에서 어떻게 되나 이 델타 y 나오고 누가 곱해져야 되나 얘하고 곱해줘야겠죠 됐나요?
그다음에 이 델타 x는 여기 앞에 향해서는 약분이 됐지만 뒤에는 약분 안 해야겠죠.
그러면 이 델타 x하고 yk하고 곱해지네요. 그래서 마이너스 2 델타 x 곱하기 yk가 되고 그다음에 여기 2가 있고 여기 0.5가 있었으니까 이건 어떻게 되나요?
곱하면 1이 되죠.
第 1 个是 x 坐标,这个是 y 坐标,这个 x 坐标会放在哪里?x 值会放在这里,y 坐标会放在这里。那么δx 除以δy 乘以 2 xk 加 1,然后 y 代替为负 yk 加 0.5。接下来原样写 b,然后因为乘了这个δx,所以它们就相互关联了。那么第一个会怎样?δy 出现,谁要相乘?它们需要相乘对吧?然后这个δx 在前面约掉了,但后面不能约掉。那么δx 和 yk 会相乘。所以是负 2δx 乘以 yk,然后这里有 2,这里有 0.5,那么乘起来会怎样?乘起来是 1。
Attendees 1 42:42
그래서 마이너스 델타 x가 되고 그다음에 이 델타 x하고 b하고 곱해서 이 델타 x b가 됐네요.
여기 이렇게 막 봤더니 그냥 다 정수의 복색으로 표현이 되죠.
여기 2를 곱해준 이유는 아마 이 0.5를 없애려고 해준 것 같아요.
그다음에 델타 x를 곱하는 거는 이 기울기에 델타 x를 분모를 없애주기 위해서 쿠팡도 같고
所以变成负δx,然后δx 乘以 b,这个δx b 就出来了。看起来都可以用整数表示。这里乘以 2 可能是为了去掉 0.5。然后乘δx 是为了去掉斜率的分母,库旁也是如此。
Attendees 1 43:13
그러면 어떻게 하면 되나 이 dk 값을 구해서 dk 값을 구해서 dk가 0보다 작다는 얘기는 중간점이 어디에 있다는 얘기예요 위쪽에 있다는 얘기죠.
그러면은 아래점을 택해라고 했으니까 x만 하나 증가하면 되겠죠.
그렇지 않으면은 x도 하나 증가하고 y도 하나 증가된 점을 택하면 되겠죠.
그래서 매 스텝마다 여러분 뭘 구하면 돼요? 매 스텝마다 요 연산을 통해서 이 연산을 통해서 dk의 값을 구해서 나아갈 방향을 선택을 해주면 돼요.
그런데 이렇게 봤더니 이게 곱셈이 몇 번 들어가나 델타 x 델타 y는 이제 입력해서 계산할 수가 있죠.
2 곱하기 델타 x에 하여튼 곱셈 한 번 그다음에 얘하고 하는데 곱셈 두 번 세 번 그다음에 네 번 이것도 어차피 상수구나 상수니까 어쨌든 식이 좀 많죠.
복잡해지고 그래서 이렇게 매 위치마다 내가 앞으로만 갈지 앞으로 가서 위로 갈지 결정하기 위해서 이런 식을 다 계산하는 거는 조금 비효율적이에요.
那么如何找出这个 dk 值?dk 值为 0 意味着中间点位于何处?意味着位于上方。既然说选择下方的点,那么只需增加 x 坐标。否则,需要同时增加 x 和 y 坐标。那么每一步你们需要做什么?每一步通过这个运算来计算 dk 值,并选择前进方向。但是仔细看看,这里有多少次乘法运算?delta x 和 delta y 现在可以通过输入计算。2 乘以 delta x,然后有几次乘法,三次、四次,反正这些都是常数。公式有点多,变得复杂。因此,为了在每个位置决定是只向前走还是向前并向上走,计算所有这些公式是有点低效的。
Attendees 1 44:27
그래서 좀 더 심플한 방법을 찾아내야 되는데 그게 바로 뭐냐 하면 판별식을 아주 간단한 연산에 의해서 업데이트 시킬 수가 있어요.
그거 하기 전에 이제 초기 판별식의 값은 얼마인가 그거 한번 볼게요.
처음에 위치가 x 제로 y 제로라고 가정을 할게요.
x 제로 y제로에다가 가정을 하고 x 좌표는 하나 증가시키고 x 제로 더하기 1 그다음에 y 좌표는 반만 증가시키라고 했죠.
y 제로 더하기 0.5 거기다가 그 좌표를 함수 f에다 넣고 이 델타 x를 곱해줘요.
그러면은 요거 요기 x 좌표는 여기 들어가고 y 좌표는 여기 들어가고 똑같이 하면은 계산 여러분 이거 할 수 있겠죠 하다 보면 재미난 게 있는데 요 부분 이 식이 사라져요.
이 식이 왜 사라질까 델타 x 분의 델타 y x 제로 마이너스 y 제로 더하기 b라는 부분이 나오는데 x 제로 y 제로는 직선 위의 점이죠.
처음 직선 위의 점이니까 얘는 0이 되겠죠 0이 0이 돼서 이제 사라지겠죠.
所以需要找到一种更简单的方法,那就是可以通过非常简单的运算来更新判别式。在此之前,让我们看看初始判别式的值是多少。假设初始位置在 x0,y0。在 x0,y0 处,增加 x 坐标为 x0+1,y 坐标增加一半,即 y0+0.5。将这个坐标代入函数 f,乘以 delta x。x 坐标放在这里,y 坐标放在这里,你们可以计算。有趣的是,这部分公式会消失。为什么会消失呢?delta x 除以 delta y,x0 减 y0 加 b 的部分出现,但 x0 和 y0 是直线上的点,所以它们会变为 0,从而消失。
Attendees 1 45:35
직선 위의 시작점에 해당하니까 정확하게 함수의 값이 0이 나오겠죠.
그래서 결국은 초기 판별식 d 제로는 이 델타 와 마이너스 델타 x예요.
이걸 가지고 이걸 가지고 판별식을 이제 증분적으로 업데이트 시킬 거예요.
dk로부터 dk 플러스 1을 계산을 할 수가 있다면은 매 스텝마다 아까 그 복잡한 매 스텝마다 이 복잡한 계산을 할 필요가 없겠죠.
아주 심플하게 계산할 수 있다면 그래서 목표는 dk로부터 dk 플러스 2를 계산하는 게 우리의 목표예요.
케이스가 두 가지로 나눠지겠죠. dk가 0보다 작았던 경우 그다음에 dk가 0보다 컸던 경우 그러면 dk가 0보다 작았던 경우는 중간점이 어디에 있다는 얘기예요?
중간점이 중간점이 위쪽에 있었다는 얘기죠. 그러니까 그림으로 봤을 때는 이런 경우에 이런 경우 중간점이 위쪽에 있었으니까 우리가 어떤 픽셀을 택한 거예요?
회색 픽셀을 택한 거죠. 이게 첫 번째 경우예요. 그러면은 이 경우에 다음 중간점은 어디가 될까요?
出席者 1 45:35 由于这是直线上的起点,函数值精确地为 0。因此,初始判别式 d 为零,是这个 delta 和负 delta x。我们将使用这个来增量更新判别式。如果我们可以从 dk 计算出 dk 加 1,那么每一步就不需要之前那么复杂的计算了。如果可以非常简单地计算,那么我们的目标就是从 dk 计算出 dk 加 2。这将分为两种情况:dk 小于 0 的情况,以及 dk 大于 0 的情况。如果 dk 小于 0,意味着中间点在哪里?中间点在上方。也就是说,从图上看,在这种情况下,中间点在上方,我们选择了哪个像素?我们选择了灰色像素。这是第一种情况。那么在这种情况下,下一个中间点会是什么?
Attendees 1 46:58
케이스 1이 EPA가 0보다 작은 경우에서 이 회색 점을 회색 픽셀을 택한 경우인데 요걸 택했다는 전제하에 다음 중간점은 어떻게 될까요?
여기가 되겠죠. 여기 요 점의 좌표가 뭐가 되나 요 점의 좌표는 x k 더하기 여기서 두 칸 전진하고 그다음에 y 자표는 0.5만 더해주면 되는 거죠.
그래서 dk 플러스 1을 구할 때 dk 플러스 1을 구할 때 들어가는 좌표의 식이 이렇게 돼요.
xk 더하기 2 yk 더하기 0.5 됐나요? 반면에 케이스 e는 dk가 0보다 크다는 얘기는 중간점이 아래쪽에 있었다는 거니까 위의 점을 택했던 거죠.
이 경우예요. 이 경우 그럼 다음번 중간점은 누가 되나요?
여기가 되겠죠 그럼 얘는 어떤 점이에요? x를 현재를 기준으로 봤을 때는 두 칸 두 칸 들어가는 점이죠.
그래서 xk 더하기 2 yk 더하기 1.5가 될 거예요.
됐나요?
出席者 1 46:58 情况 1 是 EPA 小于 0 的情况,在这种情况下选择了灰色像素,假设选择了这个像素,下一个中间点将会是什么?它将是这里。这个点的坐标是什么?坐标是 xk 加上这里向前两步,然后 y 坐标加 0.5。因此,在计算 dk 加 1 时,涉及的坐标公式是这样的:xk 加 2,yk 加 0.5,对吧?相反,情况 e 是 dk 大于 0,意味着中间点在下方,所以我们选择了上面的点。这是这种情况。在这种情况下,下一个中间点将是什么?它将是这里。从当前 x 的角度来看,它是向前两步的点。所以它将是 xk 加 2,yk 加 1.5。明白了吗?
Attendees 1 48:04
이렇게 케이스를 나눈 이유는 케이스를 나눈 이유는 이전 케이스에서 어떤 픽셀을 택하느냐에 따라서 다음 중간점이 달라지기 때문이에요.
그래서 중간점이 한 번은 이렇게 되고 한 번은 이렇게 된다는 얘기죠.
그렇기 때문에 케이스를 나눈 거고 나머지는 그냥 산수예요.
여기까지 이해했으면은 마찬가지로 dk 플러스 1은 아까 어떻게 한다고 했나요?
이 델타 x 곱하기 함수에다가 중간점을 집어넣어 주면 되는 거죠.
델타 x 분의 델타 y xk 더하기 2가 들어가는 거고 그다음에 yk 더하기 0.5가 들어가고 더하기 b가 되는 거고 이 델타 x하고 이거 이렇게 지워지네요.
이렇게 지워지면 뭐가 나오나 이 델타 y 이 델타 y가 이렇게 있고 그다음에 원래는 xk 더하기 2가 나와야 되겠죠 여기 xk 더하기 2가 나와야 되는데 그걸 하나를 뺐어요.
바깥으로 원래는 2가 돼야 되는데 1만 남겼으니까 더 생기는 게 뭔가 더 생기는 게 이 델타 와이가 더 생기겠죠.
자 그거를 하나 밖으로 뺐다는 얘기예요.
出席者 1 48:04 之所以分这些情况,是因为在前一个情况中选择哪个像素会影响下一个中间点。所以中间点有时是这样,有时是那样。因此,我们分了这些情况,其余的就是简单的算术运算。如果你理解到这里,那么对于 dk 加 1,你之前是怎么说的?就是把这个中间点代入到 deltax 乘以函数中。deltax 除以 deltay,xk 加 2 带入,然后 yk 加 0.5,再加 b,这样 deltax 就会抵消掉。当它抵消后,会出现什么?这里有 deltay,原本应该出现 xk 加 2,但是我们减去了一个。原本应该是 2,但只剩 1,所以会多出 deltay。意思是把它向外提取出来。
Attendees 1 49:22
그다음은 여기 이제 델타 x는 이쪽 부분만 약분이 된 거니까
出席者 1 49:22 接下来,这里的 deltax 只是在这部分进行了约分。
Attendees 1 49:33
얘하고 누구하고 곱해져요? 얘하고 얘네들하고 이제 곱해지는 거죠.
그래서 마이너스 2 델타 x yk가 나오고 그다음에 얘하고 곱해지면 마이너스 델타 x가 나오고 얘하고 얘하고 곱해지면은 이 델타 x b가 되네요.
됐나요? 여기서 중요한 거 이만큼 부분 파란색으로 표현된 부분이 바로 뭘까요?
바로 이전 스텝의 dk예요. 이전 스텝의 dk 그럼 얘는 결국 뭐만 더해주면 되나?
dk 더하기 2 델타 y만 더해주면 되면 되는 거죠.
이전 스텝에서 dk를 구했으면은 다음 스텝에서 복잡한 인식을 계산할 필요가 없이 뭐만 해주면 된다 이전 스텝의 dk에다가 이 벡터 y만 더해주면은 구할 수 있다는 얘기예요.
알겠나요? 두 번째 케이스 이런 경우 이런 경우는 어떻게 해주면 되나 똑같아요 dk 플러스 1은 e 델타 x 곱하기 f의 앞으로 두 칸 가고 위로 한 칸 반 관점을 대입을 한 거죠.
参会者 1 49:33 它和谁相乘?它和它们现在相乘。所以出现了负 2 delta x yk,然后与它相乘会出现负 delta x,与它们相乘则变成了 delta x b。明白了吗?这里重要的是,蓝色标记的部分是什么?就是上一步的 dk。上一步的 dk,那么它只需要加上什么?加上 dk 加 2 delta y 就可以了。如果在上一步已经计算出 dk,那么下一步就不需要复杂的识别计算,只需要对上一步的 dk 加上这个 y 向量就可以求出。明白了吗?第二种情况是怎么处理?一样的,dk 加 1 是 e delta x 乘以 f,向前走两步,向上走一步半,代入这个观点。
Attendees 1 50:34
대입한 보면은 이 델타 x 분의 요 식 그대로 대입한 거고 그래서 정리를 해 주면은 또 풀 수 있겠죠.
쭉 풀어내면은 어떻게 되냐 하면은 요런 항과 요런 항이 더 나오게 돼 있어요.
参会者 1 50:34 代入后,就是直接代入这个 delta x 的式子,所以整理后可以解出来。如果展开的话,会出现这样的项和那样的项。
Attendees 1 50:53
요항과 요항이 더 나오게 되는데 요항은 어디서 요거랑 똑같아요?
위에서 나온 거랑 똑같은 거고 그다음에 요항은 어디서 나오나 아까는 여기가 0.5였죠.
근데 여기가 이제 뭐가 되는 거예요? 1.5가 되니까 이 데이터 x하고 0.5가 아니라 1.5가 곱해지니까 마이너스 2 델타 x가 더 나오겠죠.
그래서 얘는 dk 더하기 2 델타 와 마이너스 2 델타 x 이게 추가가 되는 거고 그래서 업데이트 룰이 굉장히 간단해요.
어떻게 d제로를 구하고 두 가지 케이스로 나눠지겠죠.
만약에 d 제로가 0보다 큰 경우하고 d 제로가 0보다 작은 경우 d 제로가 0보다 크면 어떻게 하라고 했어요?
0보다 크면은 d1은 이 제로 더하기 2 델타 와 마이너스 2 델타 x 해 주면 되는 거죠.
저기다 안 쓸게요. 그다음에 d 제로가 0보다 뭐야 이게 0보다 작은 경우는 d1은 d1은 어떻게 해 주면 돼요?
디제로 더하기 2 델타 y만 해주면 되죠. 그럼 d1이 구해주면 뭘 할 수 있다는 얘기예요?
与会者 1 50:53 将会出现一些要项和要项,这些要项是从哪里来的?与之前提到的完全一样,那么接下来的要项是从哪里来的?之前是 0.5,现在变成什么了呢?变成 1.5 后,数据 x 不再是 0.5,而是乘以 1.5,所以会出现负 2δx。因此,它会增加 dk 加 2δw 和负 2δx。更新规则非常简单。如何计算 d 零,并分为两种情况。如果 d 零大于 0,会发生什么?大于 0 时,d1 是 d 零加 2δw 减 2δx。接下来,如果 d 零小于 0,d1 应该如何计算?只需加上 2δy。那么计算 d1 有什么用意呢?
Attendees 1 52:13
d1의 판매 식이 구했다는 얘기니까 위점을 택할지 아래점을 택할지 결정할 수 있다는 얘기죠.
그걸 가지고 또 d2를 구하고 d2를 구할 때는 뭘 가지고 판단을 해야 되나 d1의 부호를 가지고 내가 이 델타 y만 더해줄지 아니면 이 델타 y를 더하고 이 델타 x를 뺄지를 결정을 하면 되는 거예요.
与会者 1 52:13 既然计算出了 d1 的判定式,就可以决定选择上点还是下点。通过 d1 还可以计算 d2,计算 d2 时如何判断?需要根据 d1 的符号来决定是仅仅加δy,还是加δy 并减δx。
Attendees 1 52:42
예제가 이렇게 나와 있네. 예제가 이렇게 나와 있는데 한번 볼까요?
입력은 20 콤마 10이고 시작점 끝점은 30 콤마 18이에요.
30 콤마 18 2개가 있고 정주 좌표죠. 정주 좌표지만 기울기는 몇 분의 몇입니까?
이거는 x가 10 증가할 때 y는 8 증가 기울기 0.8이죠.
그래서 중간에 소수 정부들이 막 나와요. 그래서 판별식을 이용해서 할 수가 있는데 증분적인 판별식을 안 쓰고 그냥 판별식을 쓰다 보면 계산량이 많아지죠.
参会者 1 52:42 示例是这样的。示例是这样显示的,让我们来看看?输入是 20 逗号 10,起点和终点是 30 逗号 18。有 2 个 30 逗号 18,是整数坐标。是整数坐标,但斜率是多少?当 x 增加 10 时,y 增加 8,斜率是 0.8。所以中间会出现小数。因此,如果不使用增量判别式而直接使用判别式,计算量会变大。
Attendees 1 53:19
d제로는 얼마일까? 디제로 일단 델타 x 델타 y는 얼마야?
델타 x는 델타 x는 10이고 델타 y는 8이에요.
그다음에 d 제로는 아까 우리 공식에 의해서 2 델타 y 마이너스 델타 x니까 16 빼기 10이네 16 빼기 10 160 1602 맞나요?
16 20 그래서 d제는 얼마가 나왔어요? 6이 나왔죠 시작점 여기 색칠하고
参会者 1 53:19 d 零是多少?首先,δx 和δy 是多少?δx 是 10,δy 是 8。然后,根据我们之前的公式,d 零是 2δy 减去δx,所以是 16 减去 10,16 减去 10 是 160,160 是对的吗?16 20,那么 d 零是多少?是 6,然后在起点处涂色。
Attendees 1 53:52
시작점 색칠하고 DJ로 계산했더니 이게 양수예요.
음수예요. 양수죠. 그럼 다음 점은 어떻게 하라고 했나 d 값이 0보다 크면은 중간점이 어디 있다는 얘기예요 아래쪽에 있으니까 위쪽 점을 택하는 거죠.
한 번씩 꿔서 얘기를 하니까 복잡할 수도 있는데 그래서 위쪽 점을 택했어요.
与会者 1 53:52 开始给起点上色,DJ 计算后发现是正数。负数还是正数。那么下一个点怎么办?如果 d 值大于 0,意味着中间点在下方,所以选择上方的点。我们来回交换着讲解,可能会显得复杂,但我们选择了上方的点。
Attendees 1 54:17
다음 점 요거가 된 거고 그다음에 뭘 계산해야 돼요?
d1을 계산해야 되죠. 0보다 큰 경우니까 0보다 큰 경우는 어떻게 하라고 했나 아까 0보다 큰 경우는 2 델타 y를 더해주고 2 델타 x를 빼주라고 했죠.
그럼 6에다가 6에다가 이 델타 x를 더해주면 얼마가 돼요?
20을 더해주니까 26이 되죠. 그래서 빼기 얼마로 해줘야 되나 빼기 16을 해줘야 되죠.
그러면 얘가 얼마 나오나 뭐 잘못했네 델터 y를 2 델타 y를 더해야 되네요.
그렇죠 2 델타 y가 16이니까 여기 어떻게 더하는 거지?
6에다가 16 더한 거죠. 그럼 22가 되죠. 거기서 얼마를 빼줘야 되나 22에서 20을 빼줘야 되니까 2가 되겠네요.
그렇죠 2가 됐어요. d1은 그러면 d1도 아직도 양수죠 그럼 어떻게 돼야 돼요?
위쪽 점 선택해야 되죠.
与会者 1 54:17 接下来是这一点,接下来要计算什么?需要计算 d1。因为是大于 0 的情况,如之前所说,大于 0 的情况下要加 2δy 并减去 2δx。那么在 6 上加上δx 会是多少?加上 20 后变成 26。那么要减去多少?减去 16。那么结果是多少?啊,算错了,应该加 2δy。对,2δy 是 16,那么在 6 上加 16 是多少?变成 22。然后要减去多少?从 22 减去 20,就是 2。d1 仍然是正数,那么该怎么办?选择上方的点。
Attendees 1 55:23
그래서 이 점을 택한 거예요. 다음 점은 요보가 될지 요구가 될지 모르겠죠.
하지만 이제 누구를 업데이트해 줘야 되나 d2를 업데이트해 줘야 되죠.
d2를 업데이트해 줘야 되니까 여기 아까 이거 결국 이거 계산하면 얼만가 얘가 16이고 얘가 20이니까 빼기 40 해주면 되는 거죠.
빼기 40 얘는 빼기 40 해주면 돼요. 그래서 2에서 빼기 4 했더니 마이너스 2가 나오네.
마이너스 2가 나오니까 d2가 마이너스 2가 나왔어요.
그럼 어떤 점 선택하라는 얘기예요? 앞으로만 가라는 얘기죠.
그다음에 d3는 d3는 여기는 빼기 4였고 여기는 얼마 해줘야 돼요?
더하기 16 해주면 되는 거죠. 더하기 16이니까 여기다 16 더하니까 14가 나오네.
14가 나왔으니까 위쪽 점 택하는 거고 그다음에 빼기 얼마 4니까 여전히 양수니까 위쪽 점 그다음에 빼기 얼마 그냥 6 나오니까 위쪽 점 빼기 4에 또 양수 넣으니까 이렇게 나오죠.
所以我选择了这一点。下一点可能是要还是要求,不太确定。但现在我们需要更新谁呢?需要更新 d2。因为需要更新 d2,所以刚才这个计算,如果这个是 16,那个是 20,就减去 40。减去 40,那个减去 40 就可以了。所以 2 减去 4,得到了负 2。既然得到了负 2,d2 就是负 2。那么这是在说选择哪个点?意思是只向前走。然后 d3,这里是减去 4,这里需要加多少?加 16 就可以了。加 16 后,这里加 16 得到了 14。既然是 14,就选择上面的点,然后减去 4,仍然是正数,所以选择上面的点,再减去 6,仍然是正数,所以选择上面的点。
Attendees 1 56:24
이런 식으로 해나가면은 DJ를 처음에 구하고 그다음에 부어에 따라서 얼마죠?
이게 빼기 4를 할지 여기는 더하기 16을 할지만 결정을 해서 빨리빨리 판단할 수 있다는 얘기예요.
됐나요? 이렇게 되면은 여러분 이제 화면에 라인 그리는데 들어가는 식이 결국 뭐가 돼요?
그냥 요거도 할지 이것도 할지 하고 비교하는 것밖에 없죠.
그러면은 엄청나게 빠르게 엄청나게 빠르게 라인을 그릴 수 있다는 얘기죠.
삼각형 라인 하나 그리면 이렇게 삼각형 하나 그리고
如果这样继续下去,首先求出 DJ,然后根据增加多少?这就是减去 4 还是在这里加 16,只需要做出快速判断。明白了吗?这样的话,你们在屏幕上绘制线条的公式最终是什么?无非就是比较这个是否要做,那个是否要做。这意味着可以非常快速地绘制线条。画一个三角形的线,这样画一个三角形。
Attendees 1 57:14
화면에 삼각형 그렸어요. 얼마나 많은 라인들로 만들어졌어요 그렇죠 사실 얘는 요 라인 그리고 요 라인 그리고 이 라인 그리고 중간에 이제 스캔 라인으로 해서 직선 중에서 시작점과 끝점을 계산을 해서 채우는 그런 형태이긴 한데
听众 1 57:14 在屏幕上绘制了一个三角形。它由多少条线组成呢?事实上,它是由这条线、那条线和这条线组成的,中间通过扫描线,从直线中计算起点和终点,然后填充的形式。
Attendees 1 57:39
이런 라인들이 있죠. 이런 라인들이 이제 이런 브레즈 라인 드로잉 알고리즘 같은 걸 이용해서 효율적으로 그림이 그려지고 있는 거죠.
听众 1 57:39 有这些线。这些线现在是通过像布雷森汉姆(Bresenham)线绘制算法这样的方法,高效地绘制出来的。
Attendees 1 57:54
이게 이런 기법이 뭐다? 기본 객체를 정수자표를 갖는 스크린에 빠르게 그리는 기법들을 레스터와 기법들이다 라고 얘기를 한 거예요.
어떻게 보면 이 직선이라는 거는 디스크리트 한 거예요 아니면은 컨티뉴어스 한 거예요 컨티니스 한 거죠.
연속적인 거를 디스크리트한 모은 종이에 옮기다 보니까 이런 기법들이 이제 필요한 거죠.
这是什么技术?这是快速在具有整数坐标的屏幕上绘制基本对象的光栅化技术。从某种意义上说,直线是离散的还是连续的,是连续的。由于将连续的内容转移到离散的纸上,所以需要这些技术。
Attendees 1 58:28
그래서 이거는 시험 내기에 엄청 딱 적당하겠죠. 시험으로 입력점 주고 모는 종이 끓여주면서 색칠을 알맞게 하세요.
아니면 매 스텝마다 판별식을 계산하세요. 그런 것들 쉽게 할 수 있겠죠.
因此,这非常适合出考试。给出输入点,在纸上绘制并正确着色。或者每一步都计算判别式。这些都很容易做到。
Attendees 1 58:51
구현도 엄청 심플해요. 구현도 심플한 거고 만약에 기울기가 1보다 크면 어떻게 될까 1보다 크면은 기울기가 1보다 작아서 지금 x 값은 무조건 증가하고 여기를 택할지 여기를 택할지 결정을 했죠.
기울기가 1보다 크다는 얘기는 이런 형태의 그래프죠.
그럼 어떻게 해야 되나요? 이거는 y 값은 매 스텝마다 하나씩 증가시키고 x 값은 둘 중에 하나를 둘 중에 하나를 이제 선택하면 되겠죠.
그래서 XY 조금만 바꾸면은 기울기가 1보다 클 때 작을 때 다 되고 그다음에 음수일 때도 가능하겠죠.
음수일 때도 여러분 조금 신경 쓰면은 유도해 낼 수 있어요.
공식을 그래서 이런 수도 코드를 이런 수도 코드는 얘는 언제 1 분 양수일 때 1보다 작을 때죠.
양수이면서 1보다 클 때도 하나 만들 수 있겠죠. 그다음에 기울기가 음수이면서 마이너스 1보다 작을 때 기울기가 음수이면서 마이너스 1보다 클 때도 만들어낼 수 있겠죠.
그래서 최대한 나올 수 있는 게 네 가지예요.
与会者 1 58:51 实现也非常简单。实现很简单,如果斜率大于 1 会怎样?大于 1 时,斜率小于 1,x 值必然增加,然后选择这里还是那里。斜率大于 1 意味着是这种形式的图形。那么应该怎么办呢?这时每步增加 y 值,x 值选择两者中的一个。所以只需稍微调换 XY,就可以处理斜率大于 1 和小于 1 的情况,接下来对于负值情况也是可行的。只要稍微注意,就能推导出公式。这个伪代码是针对何种情况:正值且小于 1,正值且大于 1,斜率为负且小于-1,斜率为负且大于-1。因此最多可以覆盖四种情况。
Attendees 1 59:54
그냥 네 가지 케이스만 잘 만들어 놓으면은 어떤 라인이든지 쉽게 그릴 수 있다.
与会者 1 59:54 只要正确处理这四种情况,就可以轻松绘制任何线条。
Attendees 1 1:00:13
그다음에 확장 도형 그리기 확장 도형 그리기는 우리 기본 객체에서는 점선 다각형만 지원이 된다고 했죠.
여러분이 만약에 타원이나 원을 그리고 싶다 하면은 이제 함수를 작성을 해야 돼요.
어떻게 하면 될까? 드로우 엘립스 엘립스 해가지고 타원 그리는 함수라고 하면은 cxcy는 뭐가 될 것 같아요?
cxcy는 타원의 중심점 됐나요? 그다음에 sx sy는 타원 x축의 길이, y는 y축의 길이 그러겠죠.
그다음에 r은 뭐야? 이게 RGB는 타원의 색상 그다음에 에스 넘은 뭘까요?
에스 n 아까 타원 구하려면 어떻게 돼야 된다고 했어요.
점들을 샘플링을 한 다음에 뭘로 그려주면 좋아요.
라인들로 연결해 주면 좋다고 했었죠. 그래서 이 샘플링할 개수 개수들이고 그래서 간단하게 구현을 하면 이거는 뭘로 구현했나 GL 컬러 3D에서 색상을 결정을 하고 그다음에 GL 트라잉글 팬 아까 트라잉글 백은 어떤 타입이에요?
점 하나 주고 이렇게 주변 점을 주는 게 트라잉글 팬이었죠.
接下来是绘制扩展图形。我们之前说过基本对象只支持点、线和多边形。如果你想绘制椭圆或圆,就需要编写函数。怎么做呢?绘制椭圆函数,如果说 cxcy 是什么?cxcy 是椭圆的中心点对吗?然后 sx sy 是椭圆 x 轴的长度,y 轴的长度。那么 r 是什么?RGB 是椭圆的颜色。那么 sn 是什么?我们之前说过要获取椭圆,需要先对点进行采样,然后用什么连接这些点?我们说过可以用线连接。所以这个采样的数量就是这样。简单实现的话,是用 GL 颜色 3D 来确定颜色,然后用 GL 三角形扇。之前我们说过三角形扇是什么类型?给一个点,然后给周围的点,这就是三角形扇。
Attendees 1 1:01:34
그러면 이 때는 어떻게 해 주면 되나 점 하나를 뭘로 주면 돼요?
타원의 중심점으로 주고 그다음에 트라잉 이제 타원에 위치한 주변의 점들을 뭘로 주면 되나요?
여기 버텍스로 지정을 해주면 되겠죠. x 좌표 y 좌표 구해서 어떻게 구하면 되나 x 좌표 y 좌표는 i는 0부터 샘플링 횟수만큼 반복을 할 거예요.
그래서 i는 최대 얼마예요? 0부터 s n 마이너스 1까지 가죠.
여기서 세타 값을 구하나요? 어떻게 구해요? i 나누기 s n 마이너스 1 하면은 i가 0일 때는 이 부분만 여기 뒤쪽 안 보고 뒤쪽은 안 보고 0 나누기 뭐 하니까 이건 얼마예요?
0이죠 i가 최대일 때는 얼마예요? s n 마이너스 1이죠.
그럼 s n 마이너스 1 나누기 s n 마이너스 1이니까 뭐가 나와요?
1이 나오죠. 그래서 이 부분만 보면은 세타 값이 얼마부터 얼마까지 움직여져요 0부터 1까지 움직여지죠.
거기다가 얼마를 곱해요? 2 파를 곱하네.
那么这时候怎么办?点要怎么给?用椭圆的中心点,然后用顶点来指定椭圆周围的点。如何求 x 坐标和 y 坐标?从 i=0 开始,重复到采样次数。i 最大是多少?从 0 到 sn-1。这里如何求θ值?怎么求?i 除以 sn-1,当 i=0 时,这部分是多少?0,当 i 达到最大值时是多少?sn-1。那么 sn-1 除以 sn-1 是多少?1。所以从这部分来看,θ值是从 0 到 1 变化。然后乘以多少?乘以 2π。
Attendees 1 1:02:32
2 파이 곱하면은 결국 0부터 28까지 몇 개 s 넘 개만큼 세타 값을 샘플링을 하겠다는 얘기죠.
거기다가 x는 코사인 세타에다가 s x만큼 키워주고 중심의 좌표 더해주고 y는 cy 더하기 사인 세터에다가 sy만큼 곱해줘서 x 좌표와 y 좌표를 계산을 해요.
그다음에 이 좌표들을 GL 버티 x 2 d로 지정을 해주는 거죠.
그러면 몇 개의 점이 지정이 될까요? 여기 사이에 포문 사이에서 s 넘개의 점이 좌표들이 지정이 되겠죠.
그다음에 센터 점은 예고 그거를 뭘로 그려라 GL 트랭글 펜으로 그려라 하면은 뭐가 그려지나 원도 그려질 수 있고 타운도 그려질 수 있고 하겠죠.
그럼 부채골은 어떻게 그릴까? 부채꼴을 그리고 싶어요.
만약에
参会者 1 1:02:32 2 如果乘以π,最终意味着从 0 到 28 采样多少个θ值。然后对于 x 坐标,将其乘以 cosθ并扩大 sx 倍,再加上中心坐标;对于 y 坐标,将其乘以 sinθ并扩大 sy 倍。接下来,将这些坐标指定为 GL 顶点 x 2d。那么会指定多少个点呢?在这个 for 循环中,将会指定 s 个点的坐标。然后,如果用 GL 三角形笔绘制中心点,可能会绘制出圆或其他形状。那么扇形要如何绘制呢?如果想绘制扇形
Attendees 1 1:03:31
이런 무채골을 그리고 싶어요. 그럼 뭘 줘야 되나 시작 각도를 줘야겠죠.
그다음에 반지름을 줘야겠죠. 그다음에 끝 각도를 줘야겠죠.
그렇게 되면 이제 부채골도 그릴 수가 있겠죠.
参会者 1 1:03:31 想要绘制这样的扇形,需要给出什么呢?首先要给出起始角度,然后是半径,最后是结束角度。这样就可以绘制出扇形了。
Attendees 1 1:03:48
그래서 이것도 한번 해보세요.
所以请也试试这个。
Attendees 1 1:03:57
그다음에 삼각함수 그릴 수 있겠죠. 사인 이용하면은 코사인 지수함 익스포넨셜 로그 함수 그다음에 사용자 정의 함수들도 2차 함수, 3차 함수 여러분들이 개수만 입력을 해 주면은 뭘로 그리면 되나 GL 라인 스트립 같은 거 이용해서 그리면 되겠죠.
그래서 남은 시간에는 이런 것들을 한번 실습을 해보세요.
지난 시간에 했던 헬로우 GL에다가 확장을 해서 그리면 돼요.
接下来,你可以绘制三角函数。使用正弦,余弦,指数,对数函数,然后还有用户自定义函数,如二次函数、三次函数。只要你输入数量,就可以使用 GL 线条等方式绘制。所以在剩余的时间里,请实践这些内容。可以在上次课程的 Hello GL 基础上进行扩展。
Attendees 1 1:04:33
바로 한번 해보세요.
与会者 1 1:04:33 马上试试吧。
clovanote.naver.com