다음은 "Hello, World"와 동등한 그래픽입니다.
// first OpenVG program
// Anthony Starks ([email protected])
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "VG/openvg.h"
#include "VG/vgu.h"
#include "fontinfo.h"
#include "shapes.h"
int main() {
int width, height;
char s[3];
init(&width, &height); // Graphics initialization
Start(width, height); // Start the picture
Background(0, 0, 0); // Black background
Fill(44, 77, 232, 1); // Big blue marble
Circle(width / 2, 0, width); // The "world"
Fill(255, 255, 255, 1); // White text
TextMid(width / 2, height / 2, "hello, world", SerifTypeface, width / 10); // Greetings
End(); // End the picture
fgets(s, 2, stdin); // look at the pic, end with [RETURN]
finish(); // Graphics cleanup
exit(0);
}
좌표는 vgfloat 값이며, 왼쪽 하단에 원점이 있고 x는 오른쪽으로 증가하고 Y가 증가합니다. OpenVG는 0.0에서 1.0 범위의 빨간색, 녹색, 파란색, 알파 값을 포함하는 VGFloat 어레이로 색상을 지정하지만 일반적으로 색상은 RGBA로 지정됩니다 (RGB의 경우 0-255, 0.0 ~ 1.0).
void WindowClear()
Window Clear는 이전에 배경색을 설정하기 위해 창을 지우겠습니다
void AreaClear(unsigned int x, unsigned int y, unsigned int w, unsigned int h)
Area Clear는 창 좌표로 주어진 사각형을 지워집니다
void WindowOpacity(unsigned int a)
Windowopacity는 창 불투명도를 설정합니다
void WindowPosition(int x, int y)
창 위치는 창을 주어진 위치로 이동합니다
void init(int *w, int *h)
그래픽 초기화 : 캔버스의 너비와 높이가 반환됩니다. 이것은 모든 프로그램을 시작해야합니다.
void initWindowSize(int x, int y, unsigned int w, unsigned int h)
특정 차원으로 초기화하십시오
void finish()
그래픽을 종료하십시오. 이것은 모든 프로그램을 끝내야합니다.
void Start(int width, int height)
그림을 시작하고 기본 흰색으로 화면을 지우고 스트로크를 설정하고 검은 색으로 채 웁니다.
void End()
사진을 끝내고 화면으로 렌더링하십시오.
void SaveEnd(char *filename)
그림을 끝내고 화면으로 렌더링하고 래스터를 4 바이트 RGBA 단어로 이름을 4 바이트 RGBA 단어로 저장하십시오. RAW2PNG 프로그램은 "RAW"래스터를 PNG로 변환합니다.
void saveterm(), restoreterm(), rawterm()
터미널 설정, 현재 설정 저장, 설정 복원, 터미널을 원시 모드에 넣습니다.
void setfill(float color[4])
채우기 색상을 설정하십시오
void Background(unsigned int r, unsigned int g, unsigned int b)
RGB 값으로 정의 된 배경색으로 화면을 채우십시오.
void BackgroundRGB(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
알파로 화면을 배경색으로 지우겠습니다
void StrokeWidth(float width)
스트로크 너비를 설정하십시오.
void RGBA(unsigned int r, unsigned int g, unsigned int b, VGfloat a, VGfloat color[4])
RGBA 값에서 색상 벡터를 채우십시오.
void RGB(unsigned int r, unsigned int g, unsigned int b, VGfloat color[4])
RGB 값에서 색상 벡터를 채우십시오.
void Stroke(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
RGBA 값을 사용하여 스트로크 색상을 설정하십시오.
void Fill(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
RGBA 값을 사용하여 채우기 색상을 설정하십시오.
void FillLinearGradient(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, VGfloat *stops, int n)
채우기를 (x1, y1) 및 (x2, y2)로 둘러싸인 선형 구배로 설정하십시오. 정지 수에 지정된 오프셋 및 색상 사용
void FillRadialGradient(VGfloat cx, VGfloat cy, VGfloat fx VGfloat fy, VGfloat r, VGfloat *stops, int n)
반경 r이있는 (cx, cy)를 중심으로 한 방사형 그라디언트로 채우고 (fx, ry)의 초점 포인트를 사용하여 N 수의 정지 수에 지정된 오프셋 및 색상을 사용하십시오.
void Line(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2)
(x1, y1)과 (x2, y2) 사이의 선을 그립니다.
void Rect(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
(x, y)에서 원점 (왼쪽 하단)이있는 사각형을 그리며 크기는 (너비, 높이)입니다.
void RectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
설명 된 버전
void Roundrect(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
(x, y)에서 원점 (왼쪽 하단)이있는 둥근 사각형을 그리며 크기는 (너비, 높이)입니다.
모서리의 너비와 높이는 (RW, RH)로 지정됩니다.
void RoundrectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
설명 된 버전
void Polygon(VGfloat *x, VGfloat *y, VGint n)
x와 y를 가리키는 배열의 좌표를 사용하여 다각형을 그립니다. 좌표 수는 n입니다.
void Polyline(VGfloat *x, VGfloat *y, VGint n)
x와 y를 가리키는 배열의 좌표를 사용하여 폴리 라인을 그립니다. 좌표 수는 n입니다.
void Circle(VGfloat x, VGfloat y, VGfloat d)
직경 d와 함께 (x, y)를 중심으로 한 원을 그립니다.
void CircleOutline(VGfloat x, VGfloat y, VGfloat r)
설명 된 버전
void Ellipse(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
반경 (w, h)과 함께 (x, y) 중심에있는 타원을 그립니다.
void EllipseOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
설명 된 버전
void Qbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
(cx, cy)에서 제어점을 사용하여 (ex, ey)에서 끝나는 2 차 베 지어 곡선을 그립니다.
void QbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
설명 된 버전
void Cbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
(cx, cy) 및 (px, py)에서 제어점을 사용하여 (sx, sy)에서 시작하여 (ex, ey)에서 끝나는 입방 베 지어 곡선을 그립니다.
void CbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
설명 된 버전
void Arc(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
(x, y)를 중심으로 한 타원형 아크를 (w, h)에 그려냅니다. 시작 각도 (도)는 SA, 각도 범위는 AEXT입니다.
void ArcOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
설명 된 버전
void Text(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
aintize를 사용하여 위치 (x, y)에서 텍스트 srtring (들)을 그립니다.
void TextMid(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
PointSize를 사용하여 위치 (X, Y) 중심에있는 텍스트 Srtring (S)을 그립니다.
void TextEnd(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Pointize를 사용하여 Lend를 위치 (X, Y)에 정렬 한 상태에서 텍스트 Srtring (S)을 그립니다.
VGfloat TextWidth(char *s, Fontinfo f, int pointsize)
텍스트 너비를 반환하십시오
VGfloat TextHeight(Fontinfo f, int pointsize)
글꼴의 높이를 반환하십시오
TextDepth(Fontinfo f, int pointsize)
기준을 넘어 글꼴의 거리를 반환하십시오.
void Image(VGfloat x, VGfloat y, int w, int h, char * filename)
(x, y)에 치수 (w, h)가있는 jpeg 이미지를 놓습니다.
void Translate(VGfloat x, VGfloat y)
좌표계를 (x, y)로 변환하십시오.
void Rotate(VGfloat r)
좌표계를 각도 r (도) 주위로 회전시킵니다.
void Scale(VGfloat x, VGfloat y)
x, y로 스케일.
void Shear(VGfloat x, VGfloat y)
각도 x, y에 의한 전단.
void ClipRect(VGint x, VGint y, VGint w, VGint h)
드로잉 영역을 지정된 사각형으로 그리기 제한하고 ClipEnd ()로 끝납니다.
void ClipEnd()
끝 클리핑 영역
Font2openVG 프로그램도 포함되어 있으며,이 프로그램은 글꼴 정보를 프로그램에 포함시킬 수있는 C 소스로 전환합니다. MakeFile은/usr/share/fonts/truetype/ttf-dejavu/에있는 파일에서 글꼴 코드를 만듭니다. 다른 글꼴을 사용하려면 Font2openVG 프로그램이 구축되면 MakeFile을 조정하거나 Font 코드를 직접 생성하십시오.
font2openvg는 세 가지 인수, 즉 truetype 글꼴 파일, 포함 할 출력 파일 및 식별자의 접두사를 취합니다. 예를 들어 Dejavu Sans 글꼴을 사용합니다.
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
프로그램에 생성 된 코드를 포함시킵니다.
#include "DejaVuSans.inc"
Fontinfo DejaFont
Loadfont 함수는 글꼴 데이터에서 OpenVG 경로를 만듭니다.
loadfont(DejaVuSans_glyphPoints,
DejaVuSans_glyphPointIndices,
DejaVuSans_glyphInstructions,
DejaVuSans_glyphInstructionIndices,
DejaVuSans_glyphInstructionCounts,
DejaVuSans_glyphAdvances,
DejaVuSans_characterMap,
DejaVuSans_glyphCount);
unloadfont 함수는 경로 정보를 출시합니다.
unloadfont(DejaFont.Glyphs, DejaFont.Count);
글꼴 파일의 위치는 다를 수 있습니다. (Jessie의 현재 위치는/usr/share/fonts/truetype/ttf-dejavu입니다) fontlib makefile 변수를 사용 하여이 위치를 조정하십시오.
GPU RAM 이상의 최소 64mbytes가 필요합니다. Dejavu 글꼴과 JPEG 및 Freetype 라이브러리도 필요합니다. 인센트 도구는 코드 서식에도 유용합니다. 다음을 통해 설치하십시오.
pi@raspberrypi ~ $ sudo apt-get install libjpeg8-dev indent libfreetype6-dev ttf-dejavu-core
다음으로 라이브러리를 구축하고 테스트하십시오.
pi@raspberrypi ~ $ git clone git://github.com/ajstarks/openvg
pi@raspberrypi ~ $ cd openvg
pi@raspberrypi ~/openvg $ make
g++ -I/usr/include/freetype2 fontutil/font2openvg.cpp -o font2openvg -lfreetype
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf DejaVuSansMono.inc DejaVuSansMono
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf DejaVuSerif.inc DejaVuSerif
224 glyphs written
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c libshapes.c
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c oglinit.c
pi@raspberrypi ~/openvg/client $ cd client
pi@raspberrypi ~/openvg/client $ make test
cc -Wall -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -o shapedemo shapedemo.c ../libshapes.o ../oglinit.o -L/opt/vc/lib -lGLESv2 -ljpeg
./shapedemo demo 5
"Shapedemo"프로그램은 libshapes.c에서 발견 된 OpenVG에 구축 된 고급 API를 연습합니다.
./shapedemo # show a reference card
./shapedemo raspi # show a self-portrait
./shapedemo image # show four test images
./shapedemo astro # the sun and the earth, to scale
./shapedemo text # show blocks of text in serif, sans, and mono fonts
./shapedemo rand 10 # show 10 random shapes
./shapedemo rotate 10 a # rotated and faded "a"
./shapedemo test "hello, world" # show a test pattern, with "hello, world" at mid-display in sans, serif, and mono.
./shapedemo fontsize # show a range of font sizes (per <https://speakerdeck.com/u/idangazit/p/better-products-through-typography>)
./shapedemo demo 10 # run through the demo, pausing 10 seconds between each one; contemplate the awesome.
Shapes Library를 시스템 전체 공유 라이브러리로 설치하려면
pi@raspberrypi ~/openvg $ make library
pi@raspberrypi ~/openvg $ sudo make install
OpenVG Shapes 라이브러리는 이제 shapes.h 및 fontinfo.h를 포함하여 c 코드에서 사용할 수 있고 libshapes.so : :
#include <shapes.h>
#include <fontinfo.h>
pi@raspberrypi ~ $ gcc -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads anysource.c -o anysource -lshapes
pi@raspberrypi ~ $ ./anysource
라이브러리를위한 Go 프로그래밍 언어 래퍼는 OpenVG.Go에서 찾을 수 있습니다. 샘플 클라이언트는 디렉토리 Go-Client에 있습니다. API는 C API를 밀접하게 따릅니다. Go의 "Hello, World"프로그램은 다음과 같습니다.
GO API
package main
import (
"bufio"
"github.com/ajstarks/openvg"
"os"
)
func main() {
width, height := openvg.Init() // OpenGL, etc initialization
w2 := openvg.VGfloat(width / 2)
h2 := openvg.VGfloat(height / 2)
w := openvg.VGfloat(width)
openvg.Start(width, height) // Start the picture
openvg.BackgroundColor("black") // Black background
openvg.FillRGB(44, 77, 232, 1) // Big blue marble
openvg.Circle(w2, 0, w) // The "world"
openvg.FillColor("white") // White text
openvg.TextMid(w2, h2, "hello, world", "serif", width/10) // Greetings
openvg.End() // End the picture
bufio.NewReader(os.Stdin).ReadBytes('n') // Pause until [RETURN]
openvg.Finish() // Graphics cleanup
}
래퍼를 만들려면 : (Gopath가 설정되어 있는지 확인하십시오)
pi@raspberrypi ~/openvg $ go install .
pi@raspberrypi ~/openvg $ cd go-client/hellovg
pi@raspberrypi ~/openvg/go-client/hellovg $ go build .
pi@raspberrypi ~/openvg/go-client/hellovg $ ./hellovg