writeBuffer로 좌표를 전달한 뒤 JavaScript 배열만 바꾸면 GPU buffer도 바뀔까?
기억할 내용
createBuffer()로 크기와 허용 용도를 지정해 저장 공간을 만든다. writeBuffer()로 원본 데이터를 복사해 넣는다. 이후 JavaScript 배열만 바꿔도 GPU buffer는 자동으로 갱신되지 않으므로 변경된 데이터를 다시 전달해야 한다.
확인한 것
배열만 변경하면 GPU 값은 이전 값으로 남는다고 이유와 함께 예측했다. 직접 실습에서 첫 x좌표가 JavaScript 0.4, GPU 0.0인 것을 확인했고, 재전달 뒤에는 GPU도 0.4라고 보고했다. 이번 결과는 데이터 전달에 대한 설명과 관찰이며 삼각형 그리기나 독립 코드 구현을 완료한 것은 아니다.
To update GPU buffer after changes JavaScript array, we have to ship data.
다시 생각해 보기
JavaScript 배열을 변경한 뒤 GPU buffer를 갱신하려면 데이터를 다시 전달해야 한다는 내용을 영어로 써 보자.
기억할 내용
To update the GPU buffer after changing the JavaScript array, we have to transfer the data again.
고친 부분
“변경한 뒤”를 after changing으로 표현한다.
이번 데이터 전달에는 transfer를 쓰고, 재전달이라는 뜻을 again으로 명시한다.
앞서 사용한 특정 buffer·배열·데이터에 the를 붙인다.
목적을 나타내는 To update와 필요를 나타내는 we have to는 첫 시도에서 맞게 사용했다.
확인한 수준
예문 없는 첫 시도 후 참고 문장을 보며 완성 문장을 다시 썼다. 재작성의 JavaScrip은 JavaScript의 철자 오타로 정정했다. 독립 회상은 이후 확인한다.
핵심 개념WebGPU
device 준비 성공과 그리기 실행은 다르다
다시 생각해 보기
adapter와 device를 얻기만 하면 화면에 삼각형이 나타날까?
기억할 내용
device를 얻는 것은 GPU 작업을 준비하는 단계다. 그리기를 요청하지 않았다면 삼각형은 나타나지 않는다. GPU가 사용할 데이터 저장 공간을 만드는 작업은 device를 통해 한다.
확인한 것
이 첫 준비 단위에서는 준비만으로 그림이 나타나지 않는 이유를 설명하고, 직접 실행한 화면에서 device 확보 성공을 확인했다. 이후 buffer 생성과 좌표 전달을 이어서 확인했으며, 그리기 명령 제출은 다음 학습이다.
오답 노트English
To create로 GPU 준비의 목적 설명하기
처음의 생각
As GPU makes data storage in WebGPU, prepare device first.
다시 생각해 보기
GPU가 사용할 저장 공간을 만들려면 먼저 device를 준비해야 한다는 내용을 영어로 써 보자.
기억할 내용
To create storage for GPU data in WebGPU, we need to prepare a device first.
고친 부분
이 문장의 “만들기 위해”는 목적을 나타내는 To create ...로 쓴다.
we need to prepare로 준비하는 주체와 필요를 드러낸다.
단수 device 앞에 a를 붙인다.
확인한 수준
예문 없이 첫 시도를 한 뒤, 참고 문장을 보며 전체 문장을 다시 썼다. 재작성에 남은 sotrage는 storage의 철자 오타로 정정했다. 독립 회상은 이후 확인한다.
핵심 개념WebGL
JavaScript 값 변경과 uniform 전달과 다시 그리기
다시 생각해 보기
JavaScript에서 색을 바꾸면 이미 그린 삼각형도 바로 바뀔까?
기억할 내용
이번 예제에서는 색 선택이 JavaScript 변수만 바꾼다. uniform 값 전달과 그리기 요청까지 실행해야 삼각형 색이 바뀐다.
관찰에서 설명으로
색을 선택한 직후에는 변화가 없고, 전달하고 다시 그리는 버튼을 눌러야 색이 바뀌었다. gl_FragColor = u_color인 shader에서는 모든 fragment가 전달받은 색을 그대로 출력하므로 삼각형 전체가 같은 색으로 채워진다. 다른 shader에서는 전달받은 값을 계산에 사용할 수 있으므로 결과색이 uniform 값과 항상 같지는 않다.
오답 노트English
값을 shader에 전달하고 다시 그리기 설명하기
처음의 생각
after change value in JavaScript, The value ship the shader and have to rerender.
다시 생각해 보기
색 값을 바꾼 뒤 shader에 전달하고 삼각형을 다시 그려야 한다는 내용을 영어로 써 보자.
기억할 내용
After changing the color value in JavaScript, we need to pass it to the shader and redraw the triangle.
고친 부분
after changing으로 값을 바꾼 뒤라는 순서를 표현한다.
we need to pass it to the shader로 누가 무엇을 어디에 전달하는지 드러낸다.
redraw the triangle로 다시 그릴 대상을 명확히 한다.
확인한 수준
첫 시도 후 참고 문장을 보고 전체 문장을 다시 작성했다. 예문 없는 독립 회상이나 장기 숙달로 기록하지 않는다.
오답 노트English
each vertex와 each fragment로 shader 역할 설명하기
처음의 생각
the vertex shader determine 꼭지점's position and the fragment shader calculate each other fragment's color.
다시 생각해 보기
vertex shader와 fragment shader의 역할을 영어 한 문장으로 설명해 보자.
기억할 내용
The vertex shader determines the position of each vertex, and the fragment shader calculates the color of each fragment.
첫 문장에서 고친 부분
단수 주어 shader에는 determines, calculates를 쓴다.
“각 꼭짓점의 위치”는 the position of each vertex로 표현한다.
each other는 “서로”라는 뜻이다. 각각의 fragment를 말할 때는 each fragment를 쓴다.
확인한 수준
예문 없이 첫 문장을 쓴 뒤 피드백과 참고 문장을 보고 전체 문장을 다시 작성했다. 예문 없이 독립적으로 다시 쓸 수 있는지는 이후에 확인한다.
오답 노트Graphics
fragment shader가 삼각형 자체를 조립한다고 생각하지 않기
처음의 생각
fragment shader는 점 3개가 모여 생기는 삼각형의 색을 계산해.
다시 생각해 보기
세 꼭짓점이 삼각형이 되고 내부에 색이 채워질 때 각 단계는 무엇을 할까?
기억할 내용
vertex shader는 각 꼭짓점 위치를 결정한다. 그 뒤 WebGL이 꼭짓점을 삼각형으로 조립하고 내부 fragment를 만들면, fragment shader가 각 fragment의 색을 계산한다.
처음 생각에서 고친 부분
fragment shader가 세 점을 받아 삼각형 전체의 색을 한 번 계산하는 것이 아니다. 삼각형 조립과 래스터화가 먼저 일어나며, fragment shader는 생성된 fragment마다 실행된다.
fragment는 깊이 검사 등 이후 단계를 거쳐야 하므로 최종 픽셀과 항상 일대일로 같다고 단정하지 않는다.
확인한 수준
역할을 두 번 다시 표현한 뒤 vertex shader → 삼각형 조립 → fragment 생성 → fragment shader의 순서로 완성 설명을 작성했다.
기준점을 바로 다음 줄에서 덮어쓰기 때문에 dt는 항상 한 프레임 구간만 담는다. 누적 경과 시간은 별도의 시작 시각 변수로 따로 잰다.
이름이 이미 말하고 있다
dt = delta time. d는 그리스 문자 Δ(delta)로 수학·물리에서 변화량·차이를 뜻한다. 이름 자체가 뺄셈의 결과라는 뜻이라 누적값이 아님이 드러나 있다. deltaTime, elapsed로도 쓰고, Three.js의 Clock.getDelta()도 같은 값을 돌려준다.
함께 짚은 것
/1000은 개념이 아니라 단위 맞추기다. rAF가 넘기는 시각이 밀리초라서, 속도를 "초당 몇 px"로 잡았다면 초로 바꿔야 곱이 맞는다.
확인한 수준
기준점을 정확히 반영해 다시 설명했다. dt 상한 처리(탭을 오래 가린 뒤 dt가 튀는 경우)는 아직 배우지 않았다.
오답 노트English
so that 절과 frame rate로 프레임 독립 이동 설명하기
처음의 생각
Multiply movement by elapsed time for object same speed differently frame speed.
다시 생각해 보기
프레임 속도가 달라져도 같은 속도로 움직이게 하려면 이동량에 경과 시간을 곱한다는 내용을 영어로 설명해 보자.
기억할 내용
Multiply the movement by the elapsed time so that the object moves at the same speed even when the frame rate changes.
첫 문장에서 고친 부분
the movement, the elapsed time: 앞서 말한 특정 대상이므로 관사를 붙인다.
so that the object moves at the same speed: 목적은 명사 나열이 아니라 so that + 주어 + 동사 절로 푼다. for object same speed는 문장이 되지 않는다.
even when the frame rate changes: "달라져도"는 양보라서 even when ~ changes로 쓴다. differently frame speed는 부사 뒤에 명사가 와서 연결되지 않는다.
frame rate: 초당 프레임 수를 가리키는 관용 표현이다. frame speed라고는 쓰지 않는다.
확인한 수준
처음에는 예문 없이 작성했고 동사구 Multiply ~ by ~는 맞았다. 피드백 뒤 참고 문장을 보며 완성 문장으로 정확히 다시 썼다. 예문 없이 다시 표현할 수 있는지는 이후에 확인한다.
오답 노트Graphics
다음 프레임을 예약하지 않아도 첫 그림은 남는다
처음의 생각
첫 프레임에서 사각형이 그려지고 이후에 사각형이 사라지게 돼.
다시 생각해 보기
첫 실행 예약은 남기고 함수 내부의 다음 예약만 제거하면 그림은 어떻게 될까?
기억할 내용
다음 호출이 없으면 clearRect도 다시 실행되지 않는다. 첫 호출에서 그린 사각형은 처음 위치에 그대로 남는다.
고친 생각
처음에는 반복이 멈추면 사각형이 사라질 것이라고 예측했다. 하지만 실행 순서는 지우기 → 그리기 → 다음 위치 준비다. 다음 예약을 제거하면 이 순서를 한 번만 실행한다. x 변수에 새 값을 넣어도 기존 그림 자체가 이동하거나 지워지지 않는다.
설명을 듣고 그림이 남는다고 바로잡은 뒤, 함수가 한 번만 실행돼 지우기도 반복되지 않는다는 이유까지 설명했다. 실제 실행 검증이나 구현 숙달을 확인한 것은 아니다.
오답 노트English
need to와 keep running으로 다음 프레임 요청 설명하기
처음의 생각
It is that request next frame for animation.
다시 생각해 보기
애니메이션을 계속하려면 다음 프레임을 다시 요청해야 한다는 내용을 영어로 설명해 보자.
기억할 내용
We need to request the next frame to keep the animation running.
첫 문장에서 고친 부분
We need to request: 주어와 ‘요청해야 한다’는 의미를 명확히 한다.
the next frame: 이어지는 다음 프레임을 가리키므로 the를 붙인다.
to keep the animation running: 애니메이션이 계속 실행되게 하려는 목적을 표현한다. keep + 대상 + -ing 형태다.
확인한 수준
처음에는 예문 없이 작성했고, 피드백 뒤에는 참고 문장을 보며 완성 문장으로 정확히 다시 썼다. 예문 없이 다시 표현할 수 있는지는 이후에 확인한다.
오답 노트English
clear와 redraw로 움직임 설명하기
처음의 생각
Canvas 2D doesn't move Object to destination. Just repeat removing and drawing for change position.
다시 생각해 보기
Canvas 2D에서 사각형이 움직이는 것처럼 보이는 이유를 영어 한 문장으로 설명해 보자.
기억할 내용
We make an object appear to move by repeatedly clearing the canvas and redrawing it at a new position.
첫 문장에서 고친 부분
지우고 다시 그리는 과정을 반복한다는 의미는 전달했고 doesn't move도 맞게 썼다. 다음 표현을 다듬었다.
이 문장의 object는 보통명사이므로 소문자로 쓰고, 단수 형태 앞에 an을 붙인다.
처음 문장의 목적 표현 for change position은 to change its position으로 고칠 수 있다.
캔버스를 지우기는 clear, 다시 그리기는 redraw로 구체화한다.
완성 문장의 appear to move는 “움직이는 것처럼 보이다”, by + -ing는 방법을 나타낸다.
확인한 수준
첫 시도는 영어 예문 없이 작성했다. 피드백 이후에는 위 참고 문장을 보며 완성 문장으로 다시 썼다. 같은 원리를 예문 없이 다시 표현할 수 있는지는 다음에 확인한다.
오답 노트Three.js
uniforms가 구체의 모양을 만드는 걸까?
처음의 생각
uniforms는 대기의 구체 형태와 크기를 만든다.
다시 생각해 보기
구체를 만들고 대기의 색을 바꾼다면, Geometry와 uniforms는 각각 어떤 역할을 할까?
기억할 내용
Geometry는 물체의 형상을 나타내는 꼭짓점 등의 데이터를 담고, uniforms는 셰이더에 전달하는 값이다. 구체의 형태는 SphereGeometry 같은 기하 데이터로 만들 수 있다.
어디서 생각이 꼬였을까?
크기나 색을 나타내는 값과, 형상 자체의 데이터를 혼동했다. 셰이더가 uniform 값을 이용해 꼭짓점을 움직일 수는 있지만 uniforms 자체가 구체를 만드는 기능은 아니다.