Partage
  • Partager sur Facebook
  • Partager sur Twitter

3D fil de fer

28 octobre 2014 à 17:13:09

j'ai une petite question quel est la technique pour faire quelque chose comme ça https://intra.epitech.eu/module/2014/B-MUL-050-1/NCE-1-1/acti-165810/project/file/Exemples/fdf-1.png

merci et bonne soirée

  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2014 à 17:45:42

On ne peut pas voir l'image sans se connecter au site d'epitech.
  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2014 à 20:08:40

T'as la bistro à faire , t'occupe du FDF pour l'instant.

Sinon man mlx , man google , man elearning, man math.

  • Partager sur Facebook
  • Partager sur Twitter
28 octobre 2014 à 20:45:39

Ridicule ..... regarde l'e-learning avant toute choses. Et c'est pas en demandant la réponse que tu va réussir Epitech
  • Partager sur Facebook
  • Partager sur Twitter
Qui ose, gagne
29 octobre 2014 à 9:20:27

je ne demande pas la réponse je veux juste avoir la méthode pour afficher n'importe quoi en 3D
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2014 à 9:30:10

demande auprès de tes AERs même si je suis d'accord avec thewarwarcar sur le fait que t'a la bistro a faire pour le moment et que le fdf c'est pas pour tout de suite ^^

Tu peux aussi demander a ta promo c'était le but de la piscine (travaille d'équipe) :-°  

  • Partager sur Facebook
  • Partager sur Twitter
Si tu crash sous Windows c'est la faute à Windows. Si tu crash sous Linux c'est ta faute et puis c'est tout
29 octobre 2014 à 9:44:20

Alors là j'hallucine complètement... Dans un autre topic, je t'ai conseillé de lire les cours et pourtant te revoilà... Donc je vais recommencé... Tout est dans le cours --'
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2014 à 10:16:33

Oula, je suis le premier "non epitech" à venir sur ce topic ?

Le titre du topic était alléchant ! Bien entendu, je n'ai absolument pas pu voir le lien, car il y a un mot de passe. Donc je ne sais pas exactement ce que tu veux faire (même si je me doute). Si tu précises, je pense que ça sent les matrices de transformation, et l'algorithme de Bresenham par la suite.

Mais on ne pourra en parler que si on en sait davantage !

  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

29 octobre 2014 à 14:53:37

c'est quelque chose comme ça http://styve-simonneau.com/img/fdf.jpg
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2014 à 15:06:28

Ah, une carte de hauteur iso !

Ah mais c'est même encore plus simple que je pensais : pas besoin de matrices : un simple décalage des points vers le haut en fonction de l'altitude !

De plus, je vois qu'il n'y a même pas de gestion de parties cachées ! Assez simple !

Tu l'as, ton algo pour tracer des lignes, ou tu dois le faire ?

Car au niveau algo, c'est peanuts !

  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

29 octobre 2014 à 15:34:52

j'ai l'algo pour tracer des lignes mais je dois utiliser un fichier pour afficher la map.
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2014 à 15:48:04

Le fichier, bah c'est pas difficile, tu charges ça dans un tableau.

Moi, ton projet m'a amusé, alors j'en ai fait une petite version, par contre je ne lis pas un fichier, j'applique une fonction Z = f(x,y) que j'ai appelé GetAlt.

Et j'ai fait une fonction qui, sur une moitié de terrain, dessine un demi cercle avec une belle pente, l'autre moitié un beau sol sinusoïdale.

Marrant !

#include <sdl/sdl.h>
#include <math.h>

#ifdef WIN32
#pragma comment(lib,"sdl.lib")
#pragma comment(lib,"sdlmain.lib")
#endif

void SDL_PutPixel32(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
	Uint8 *p;	
	if (x<0 || y<0 || x>surface->w-1 || y>surface->h-1)
		return;
	p = (Uint8*)surface->pixels + y * surface->pitch + x * 4;
	*(Uint32*)p = pixel;
}

void Line(SDL_Surface* surf,int x1,int y1, int x2,int y2,Uint32 couleur)  // Bresenham
{
	int x,y;
	int Dx,Dy;
	int xincr,yincr;
	int erreur;
	int i;
	Dx = abs(x2-x1);
	Dy = abs(y2-y1);
	if(x1<x2)
		xincr = 1;
	else
		xincr = -1;
	if(y1<y2)
		yincr = 1;
	else
		yincr = -1;
	x = x1;
	y = y1;
	if(Dx>Dy)
	{
		erreur = Dx/2;
		for(i=0;i<Dx;i++)
		{
			x += xincr;
			erreur += Dy;
			if(erreur>Dx)
			{
				erreur -= Dx;
				y += yincr;
			}
			SDL_PutPixel32(surf,x, y,couleur);
		}
	}
	else
	{
		erreur = Dy/2;
		for(i=0;i<Dy;i++)
		{
			y += yincr;
			erreur += Dx;
			if(erreur>Dy)
			{
				erreur -= Dy;
				x += xincr;
			}
			SDL_PutPixel32(surf,x, y,couleur);
		}
	}
	SDL_PutPixel32(surf,x1,y1,couleur);
	SDL_PutPixel32(surf,x2,y2,couleur);
}

int KeyHit()
{
	SDL_Event e;
	if (SDL_PollEvent(&e))
		if (e.type == SDL_KEYDOWN)
			return 1;
	return 0;
}

void Positionne(int i,int j,int alt,int* outx,int* outy)
{
	int startx,starty;
	int pas = 10;
	startx = 10;
	starty = 300;
	*outx = startx + i*pas + j*pas;
	*outy = starty + i*pas/2 - j*pas/2 - alt;
}

int GetAlt(int i,int j)
{
	if (i>25)
		return (int)(10*cos(i*1.0/3)+10*sin(j*1.0/3));

  	if ((i-25)*(i-25) + (j-25)*(j-25)<380)
  		return 20;
 	return 0;
}

void Segment(SDL_Surface* screen,int imin,int jmin,int imax,int jmax)
{
	int xmin,ymin,xmax,ymax;
	int alt = 0;
	Positionne(imin,jmin,GetAlt(imin,jmin),&xmin,&ymin);
	Positionne(imax,jmax,GetAlt(imax,jmax),&xmax,&ymax);
	Line(screen,xmin,ymin,xmax,ymax,0x00007700);
}

int main(int argc,char** argv)
{
	SDL_Surface* screen;
	int i,j;
	SDL_Init(SDL_INIT_VIDEO);
	screen=SDL_SetVideoMode(1000,600,32,SDL_SWSURFACE|SDL_DOUBLEBUF);  
	for(i=0;i<50;i++)
	{
		for(j=0;j<50;j++)
		{
			if (i!=49)
				Segment(screen,i,j,i+1,j);
			if (j!=49)
				Segment(screen,i,j,i,j+1);
		}
	}
	SDL_Flip(screen);
	while(!KeyHit()){}
    SDL_Quit();
	return 0;
}



  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

29 octobre 2014 à 16:04:32

Tant mieux si il t'a amusée. merci pour l'exemple je vais essayer.
  • Partager sur Facebook
  • Partager sur Twitter
29 octobre 2014 à 16:13:36

Toi l'informatique n'a pas l'air de t'amuser par contre vu tes topics.

Tu t'achètes un diplôme ? (pas mal de gens payent pour s'acheter des diplômes), tu ne vas pas t'emmerder si tu fais ta carrière dans un truc que tu n'aimes pas ?

-
Edité par Fvirtman 29 octobre 2014 à 16:16:36

  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

30 octobre 2014 à 0:08:26

Tu dois surement trouvé la bistro trop dur , c'est vrai elle l'est mais tu ne devrais pas la negliger pour autant. C'est vrai que faire du graphique peut paraitre plus amusant , mais fait la bistro , du moins essaye.
  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 15:33:46

je suis en train de la faire et oui je galère un peu beaucoup.
  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 15:35:14

Et sinon, ça marche chez toi mon programme de fil de fer ? :)
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

30 octobre 2014 à 15:59:55

je ne l'ai pas encore essayé mais si tu l'a fais tourné et que ça a marché ça devrai le faire.

  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 16:03:34

D'accord. Tu n'es pas trop motivé pour pas grand chose j'ai l'impression, si ?
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

30 octobre 2014 à 16:06:54

si je suis motivé mais je n'ai pas installer la SDL. il faut que je trouve comment faire sous opensuse

  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 16:09:34

il me dit qu'il ne trouve pas sdl.h alors que quand je lance le rpm il me dit:

  le fichier /usr/bin/sdl-config de l'installation de SDL-devel-1.2.15-1.x86_64 entre en conflit avec le fichier du paquet libSDL-devel-1.2.15-10.4.1.x86_64
        le fichier /usr/include/SDL/SDL_config.h de l'installation de SDL-devel-1.2.15-1.x86_64 entre en conflit avec le fichier du paquet libSDL-devel-1.2.15-10.4.1.x86_64
        le fichier /usr/include/SDL/SDL_endian.h de l'installation de SDL-devel-1.2.15-1.x86_64 entre en conflit avec le fichier du paquet libSDL-devel-1.2.15-10.4.1.x86_64
        le fichier /usr/lib64/libSDLmain.a de l'installation de SDL-devel-1.2.15-1.x86_64 entre en conflit avec le fichier du paquet libSDL-devel-1.2.15-10.4.1.x86_64
        le fichier /usr/lib64/pkgconfig/sdl.pc de l'installation de SDL-devel-1.2.15-1.x86_64 entre en conflit avec le fichier du paquet libSDL-devel-1.2.15-10.4.1.x86_64

  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 16:13:05

Fvirtman t'a quasiment tout donné, suffit de le faire en mlx maintenant, pas besoin de SDL.

  • Partager sur Facebook
  • Partager sur Twitter
30 octobre 2014 à 16:41:58

En effet, les fonctions SDL sont très localisées, et tout peut être remplacé très rapidement.
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

15 novembre 2014 à 12:52:40

j'ai une petite question à quoi sert

#include <sdl/sdl.h>
#include <math.h>
 
#ifdef WIN32
#pragma comment(lib,"sdl.lib")
#pragma comment(lib,"sdlmain.lib")
#endif
 
void SDL_PutPixel32(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
    Uint8 *p;   
    if (x<0 || y<0 || x>surface->w-1 || y>surface->h-1)
        return;
    p = (Uint8*)surface->pixels + y * surface->pitch + x * 4;
    *(Uint32*)p = pixel;
}

c'est pour afficher un pixel en 32 ?

-
Edité par Rémi1995 15 novembre 2014 à 13:11:46

  • Partager sur Facebook
  • Partager sur Twitter
15 novembre 2014 à 20:29:10

Un pixel en 32 bits ! (l'usage courant des surfaces sur les machines actuelles)

  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

17 novembre 2014 à 13:24:52

pourquoi t'as codé une fonction pour afficher un pixel en 32 bits ? pourquoi ne pas afficher tout simplement un pixel ?

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2014 à 13:50:36

La résolution de ton écran a une profondeur de pixels. Maintenant, l'écrasante majorité, les pixels font 32 bits par pixels (bpp) (4 octets par pixels). exit les modes palletisés, exit le 16 bits avec masquage de bits pour récupérer les composants, exit le mode 24 bits qui a un mauvais alignement mémoire.

Il n'y aura probablement jamais plus de bits par pixel pou l'affichage : l'oeil humain est incapable de voir des nuances intermédiaires entre les nuances fournies par le 32 bpp. Nous sommes arrivés à la limite biologique. A moins qu'on change de mode RGB, mais à mon avis, ce n'est pas demain la veille.

Donc ma fonction PutPixel, pour être compacte, ne gère que le cas 32 bpp, et je pense fortement que chez toi aussi, ça tourne en 32 bpp

  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

17 novembre 2014 à 14:09:56

mais ma lib gère l'affichage d'un pixel du coup j'en ai pas besoin si ?

  • Partager sur Facebook
  • Partager sur Twitter
17 novembre 2014 à 14:42:26

Ben non. Tu peux la remplacer.
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

17 novembre 2014 à 15:34:00

ok merci c'est bien ce que je pensais
  • Partager sur Facebook
  • Partager sur Twitter