2013-12-14 9 views
7

एसडीएल 2.0 में पिक्सेल के साथ कोई कैसे आकर्षित करता है?एसडीएल 2.0 में पिक्सल कैसे आकर्षित करें?

मैं सी ++ से परिचित होने की कोशिश कर रहा हूं, लेकिन सुंदर चित्रों के बिना करना बहुत मुश्किल है, इसलिए मैं एक बहुत ही बुनियादी ग्राफिक्स डिस्प्ले चीज चलाने की कोशिश कर रहा हूं। मैं वास्तव में यह करना चाहता हूं कि मुझे एक खिड़की दें, मुझे उस पर rgbα पिक्सेल खींचने दें, और उन पिक्सेल के बारे में जानकारी एक्सेस करें। ऐसी कई चीजें हो सकती हैं जो मैं चाहता हूं कि मुझे पता नहीं है, लेकिन यह सब अभी मेरी सूची में है। इस पर मेरे शोध ने मुझे एसडीएल का उपयोग करने का प्रयास किया है, वर्तमान संस्करण 2.0 है।

लगभग सभी मेरे ग्राफिक्स अनुभव <canvas> पर जावास्क्रिप्ट का उपयोग करने से आता है। अधिकांश अन्य बिट मेरे कैलक्यूलेटर से आता है, जिसमें यह वास्तव में भयानक Pxl-On() कमांड इतना आसान है।

यदि यह मायने रखता है, तो मैं अपने सी ++ के लिए मिनीजीडब्लू का उपयोग कर रहा हूं। इसके अलावा, अगर मुझे कुछ चाहिए तो एसडीएल 2.0 की तुलना में वहां कुछ बेहतर है, सलाह का स्वागत है।


** "बेहतर" का मतलब है "क्या कार्यक्षमता की आवश्यकता है, लेकिन SDL2.0 से कम कुल कार्यक्षमता शामिल हैं, और/या SDL2.0 की तुलना में एक अधिक सहज ज्ञान युक्त/कम जटिल *** एपीआई है।"

*** एक ही कार्य को पूरा करने के लिए कोड की कम पंक्तियां।

उत्तर

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 पढ़ें।

यदि आपको एसडीएल 2 के साथ बहुत परेशानी हो रही है तो आपको Lazy Foo tutorials पढ़ने की सलाह देते हैं। एसडीएल 2 अनुभाग अभी भी एक काम प्रगति पर है, लेकिन सीखने के लिए पर्याप्त सामग्री है।

+0

धन्यवाद: पर उदाहरण! उनको देखा जाना चाहिए; बेवकूफ था। माफ़ कीजिये। – Jordan

2

मुझे पाइथन + PySDL2 प्रोटोटाइप के साथ और अधिक आसान लगता है। डीबग भी मजाकिया है, क्योंकि यह पिक्सेल ग्राफिक्स के लिए veeeery slooow है। =) यहाँ पूरा कोड है:

""" 
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; 
} 

संकलित साथ:

gcc -std=c89 -Wextra -pedantic-errors -o 'main.out' 'main.c' -lSDL2 

libsdl 2.0.2, उबंटू 15.10 पर परीक्षण किया गया।

यदि आप एक बार में पिक्सल का एक बड़ा आयत सेट करना चाहते हैं, उदा।पूरी स्क्रीन या स्प्राइट, SDL_Texture + SDL_RenderCopy और संभवतः SDL_TEXTUREACCESS_STREAMING का उपयोग करें, क्योंकि यह बहुत तेज़ होगा।

संबंधित मुद्दे