2013-12-14 36 views
7

SDL2.0でピクセルをどのように描画しますか?SDL 2.0でピクセルを描画する方法は?

私はC++に慣れようとしていますが、これはきれいな絵なしでは非常に難しいので、非常に基本的なグラフィックス表示を実行しようとしています。私が本当にしたいのは私にウィンドウを与え、それにrgbαピクセルを描画させ、それらのピクセルに関する情報にアクセスできるようにすることだけです。私が気づいていないことが私が欲しい他のものがあるかもしれませんが、それは今私のリストにあるすべてです。これに関する私の研究は、現在のバージョンが2.0であるSDLの使用を試みるようになった。

私のグラフィックス体験のほとんどは、<canvas>でJavaScriptを使用しています。他のほとんどのビットは、この本当に awesome Pxl-On()コマンドを持っている私の電卓から来て、簡単です。

問題がある場合は、私のC++にMinGWを使用しています。また、SDL2.0以上のものがあれば、アドバイスを歓迎します。


**「より良い」「私は必要なものな機能が含まれますが、SDL2.0未満の合計機能、および/またはSDL2.0より直感的/それほど複雑*** APIを持っている」を意味します。

***同じタスクを達成するためのコード行が少なくなりました。

答えて

7

コードの構造がわかりません。 SDL_WindowとSDL_Rendererがあると仮定すると、SDL_RenderDrawPoint(renderer, x, y)を呼び出すだけです。

レンダラーやウィンドウがない場合は、SDL_CreateWindowAndRenderer()で両方を作成できます。例:

SDL_Window *window; 
SDL_Renderer *renderer; 
SDL_CreateWindowAndRenderer(800, 600, 0, &window, &renderer); 

//Probably on a loop 
    SDL_RenderDrawPoint(renderer, 400, 300); //Renders on middle of screen. 
    SDL_RenderPresent(renderer); 

これは、画面の中央にピクセルを描画する必要があります。ピクセルを読み取ることは少し複雑です。 SDL_RenderReadPixels()を使うことができます。これは領域を読み込むために作られていますが、1x1の領域を指定することはできます。本当に必要な場合は、wiki pageをお読みください。

SDL2に問題がある場合は、Lazy Foo tutorialsをお読みください。 SDL2セクションはまだ進行中ですが、学習を始めるには十分な資料があります。

+0

ありがとう:の例! Prollyはそれらを見たはずです。愚かだったごめんなさい。 – Jordan

2

私は、Python + PySDL2でプロトタイプが簡単です。デバッグも面白いです。なぜなら、それはピクセルグラフィックスのための滑らかなものであるからです。 =)ここで完全なコードである:

""" 
The code is placed into public domain 
by anatoly techtonik <[email protected]> 
""" 

import sdl2 
import sdl2.ext 

sdl2.ext.init() 

window = sdl2.ext.Window('', size=(300, 100)) 
window.show() 

renderer = sdl2.ext.Renderer(window) 
renderer.draw_point([10,10], sdl2.ext.Color(255,255,255)) 
renderer.present() 

running = True 
while running: 
    for e in sdl2.ext.get_events(): 
    if e.type == sdl2.SDL_QUIT: 
     running = False 
     break 
    if e.type == sdl2.SDL_KEYDOWN: 
     if e.key.keysym.sym == sdl2.SDLK_ESCAPE: 
     running = False 
     break 
3

のRunnable例

SDL_RenderDrawPointを用いて画面上の画素によって斜めの赤線の画素を描き。

enter image description here

#include <stdlib.h> 

#include <SDL2/SDL.h> 

#define WINDOW_WIDTH 600 

int main(void) { 
    SDL_Event event; 
    SDL_Renderer *renderer; 
    SDL_Window *window; 
    int i; 

    SDL_Init(SDL_INIT_VIDEO); 
    SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_WIDTH, 0, &window, &renderer); 
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); 
    SDL_RenderClear(renderer); 
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); 
    for (i = 0; i < WINDOW_WIDTH; ++i) 
     SDL_RenderDrawPoint(renderer, i, i); 
    SDL_RenderPresent(renderer); 
    while (1) { 
     if (SDL_PollEvent(&event) && event.type == SDL_QUIT) 
      break; 
    } 
    SDL_DestroyRenderer(renderer); 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
    return EXIT_SUCCESS; 
} 

でコンパイルします。

libsdl 2.0.2でテスト
gcc -std=c89 -Wextra -pedantic-errors -o 'main.out' 'main.c' -lSDL2 

、Ubuntuの15.10。

大きな矩形のピクセルを一度に設定する場合は、画面全体またはスプライトを使用する場合は、SDL_Texture + SDL_RenderCopyとおそらくSDL_TEXTUREACCESS_STREAMINGを使用します。これははるかに高速です。

関連する問題