무민은귀여워

0703 과제 본문

IT/기타

0703 과제

moomini 2019. 7. 3. 23:21
반응형

1. DrawCall에 대해 조사해오세요.

스크린에 오브젝트를 렌더링하기 위해 렌더링 엔진은 OpenGL이나 Direct3D 그래픽 API에(GPU : 그래픽 처리 장치) 그리기 요청(draw call)을 하는데 이 요청을 드로우 콜이라고 한다.

 

모든 그리기 요청(draw call)은 CPU 상의 상당한 퍼포먼스 오버헤드를 일으킨다.

 

# 오버헤드 : 오버헤드는 특정한 기능을 수행하기 위해 추가로 사용되는 컴퓨터 자원을 지칭하는 것이다
예를 들어, 감사 증적을 유지하기 위해 10%의 오버헤드가 필요하다는 말은, 감사 증적 기능이 동작하고 있는 동안에는 그 프로그램의 실행속도가 10% 가량 늦어진다는 것을 의미한다.

 

이 작업은 자원이 많이 들기 때문에 드로우 콜을 줄이는 것이 성능 향상에 있어 매우 중요하다.

스프라이트들을 스프라이트 시트에 모두 모아놓으면 단 한번의 드로우 콜로 모든 스프라이트를 화면에 표시할 수 있다. 

 

참고 :

http://bbbcomputersite.blogspot.com/2016/05/drawcall.html

 

DrawCall이란? - 작성 완료

DrawCall 이 뭐니?    랜더링 명령 한번 드로우 콜(Draw Call)이란? 스크린에 오브젝트를 렌더링하기 위해 렌더링 엔진은 OpenGL이나 Direct3D 그래픽 API에(GPU : 그래픽 처리 장치) 그리기 요청(draw c...

bbbcomputersite.blogspot.com

https://hungry2s.tistory.com/105

 

[Unity3D] 드로우 콜 (Draw Call)에 관하여

유니티로 프로젝트를 진행하다가 간혹 드로우콜(Draw Call)에 관한 문제를 많이 겪는다. - 특히나 모바일 같은 경우 - PC기반은 어느정도 사양에 의해 커버가 돼는데 - 그런데도 발생하기도 함.. 극한으로 최적화..

hungry2s.tistory.com

2. Vertex Shader, Pixel Shader에 대해 조사해오세요.

쉐이더 : 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수

쉐이더는 픽셀의 농담, 색조, 명암을 결정한다.

쉐이더의 최종결과는 농담, 색조, 명암 효과를 전부 짬뽕해서 나온 RGBA색상 값 하나이다.

 

정점쉐이더(vertex shader) : 3D 물체를 구성하는 정점들의 위치를 화면좌표로 변환하는 것.

정점쉐이더는 3D 물체를 구성하는 정점의 수만큼 실행된다.

※물체의 위치를 다른 공간으로 옮기는 과정을 공간변환(space transformation)이라고 부른다.

 

래스터라이저(rasterizer) : 화면을 구성하는 단위는 픽셀이니까 화면에 뭔가 그림을 그리려면 픽셀을 어디에 몇 개나 그려야 하는지를 알아야한다. 이것이 래스터라이저이다. 래스터라이저는 정점쉐이더가 출력하는 정점의 위치를 차례대로 3개씩 모아 삼각형을 만든 뒤, 그 안에 들어갈 픽셀들을 찾아낸다.

 

픽셀쉐이더(pixel shader) : 화면에 출력할 최종색상을 계산하는 것이다.

 

참고 : https://kblog.popekim.com/2011/11/01-part-1.html

 

[포프의 쉐이더 입문강좌] 01. 쉐이더란 무엇이죠? Part 1

게임 프로그래머 김포프의 블로그

kblog.popekim.com

3. strlen, strcmp, strcat, strcpy를 구현해주세요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include<stdio.h>
#include<string.h>
 
int myStrlen(char* str)
{
    int num = 0;
 
    while (str[num] != '\0')
    {
        num++;
    }
 
    return num;
}
 
int myStrcmp(char* str1, char* str2)
{
    int idx = 0;
 
    while (str1[idx] != '\0' || str2[idx] != '\0')
    {
        if (str1[idx] > str2[idx])
        {
            return 1;
        }
        else if (str1[idx] < str2[idx])
        {
            return -1;
        }
 
        idx++;
    }
 
    return 0;
}
 
char* myStrcat(char* str1, char* str2)
{
    char* temp = str1;
 
    while (*str1 != '\0')
    {
        str1++;
    }
 
    while (*str2 != '\0')
    {
        *str1 = *str2;
        str1++;
        str2++;
    }
 
    *str1 = '\0';
 
    return temp;
}
 
char* myStrcpy(char* str1, char* str2)
{
    int idx = 0;
 
    while (str2[idx] != '\0')
    {
        str1[idx] = str2[idx];
        idx++;
    }
 
    str1[idx] = NULL;
    
    return str1;
}
 
int main()
{
    char str[256];
    char str1[256= "aaa";
    char str2[256= "aab";
    char str3[256= "aac";
    printf("%d \n", myStrlen(str1));
    printf("%d \n", myStrcmp(str1, str1));
    printf("%d \n", myStrcmp(str2, str1));
    printf("%d \n", myStrcmp(str2, str3));
    printf("%s \n", myStrcat(str1, str2));
    printf("%s \n", myStrcpy(str1, str2));
    printf("%s \n", myStrcpy(str3, str2));
 
    return 0;
}
cs
반응형

'IT > 기타' 카테고리의 다른 글

*.ini 파일 읽고 쓰기  (0) 2019.07.10
0709 과제  (0) 2019.07.09
0702 과제  (0) 2019.07.02
0701 과제  (0) 2019.07.01
메모) php 코딩 규약  (0) 2018.11.26
Comments