---
title: "Vad är det jag inte ser?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/107673-vad-är-det-jag-inte-ser"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Alpha II"
published: "2004-07-19T22:33:56.000Z"
updated: "2004-07-21T12:11:15.000Z"
replies: 4
views: 303
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/107673-vad-är-det-jag-inte-ser"
---

# Vad är det jag inte ser?

## #1 — Alpha II, 2004-07-19T22:33Z

**Edit// Det verkar som om problemet ligger i PlotPixel och inte denna funktion**

Edit2// PlotPixel funkar hur fint som helst när den blir anropad av andra funktioner.... Det skumma är att PlotPixel får rätt färger skickade till sig men just när Gouraud funktionen anropar den blir det fel.... Vad f\*n kan det vara?

```
void Rasterizer::PlotPixel(CVertex & P)
{
	int nBytesPerPixel = nColorDepth / 8;
	unsigned int offset = (P.y*(nViewportWidth)+P.x)*nBytesPerPixel;
	unsigned long nColor = (
		(F2B(P.a) << 24) |
		(F2B(P.r) << 16) |
		(F2B(P.g) << 8) |
		(F2B(P.b)));
	memcpy((lpbColorBuffers[nActiveColorBuffer]+offset), &nColor, 4);
}
```

\----

Jag är medveten om att detta är en enorm kodsnutt att glutta igenom men jag hoppas att ni ändå orkar hjälpa mig. :)

Denna kod är i stort sett identisk med koden i avsnittet "Gouraud triangle" på <http://www-users.mat.uni.torun.pl/~wrona/3d_tutor/tri_fillers.html.> Trots det blir färgerna helt fel när jag testkör programmet. Jag skrev från början en liknande kod som lyckades få fram en helt OK gouraud skuggad triangel förutom att den hade en väldigt ful kant (vet ej varför). 

Alla medlemsvariabler till CVertex klassen är floats.

Har gått igenom koden flera ånger nu men hittar inga olikheter, de som var har jag ändrat utan framgång. Någon som kan hjälpa mig hitta felet?

```
// Tog bort koden eftersom det inte är där problemet ligger
```

Permalänk: https://www.webforum.nu/p/107673

## #2 — Viktor, 2004-07-20T07:44Z

EDIT: FEL! Man ska inte svara på inlägg för tidigt på morgonen :)

Borde inte 

```
memcpy((lpbColorBuffers[nActiveColorBuffer]+offset), &nColor, 4);
```

vara

```
memcpy((lpbColorBuffers[nActiveColorBuffer]+offset), nColor, 4);
```

Det är väll värdet som du vill kopiera och inte minnes adressen som jag tror du kopierar om du gör som du skrivit.

/Viktor

Permalänk: https://www.webforum.nu/p/1391549

## #3 — Alpha II, 2004-07-20T11:17Z

Viktor,
**memcopy** tar en void-pekare som andra argument.

Detta verkar vara ett väldigt klurigt fel, alla funktioner funkar på vissa ställen de anropas men inte på andra. Funktionen InterpolateLine() använder också PlotPixel men för den funktionen funkar den perfa. Testade att rita en triangel med hjälp av att bara ange kordinaterna och färgerna (det funkar lite annorlunda annars), då fungerade det. Men lite senare testade jag samma sak igen (lite andra kordinater o färger) men då fungerade det inte.

Jag skall ladda upp koden lite senare så att ni får se på helheten :)

Permalänk: https://www.webforum.nu/p/1391617

## #4 — Alpha II, 2004-07-20T11:35Z

Här är koden

Bilagor:

- [rasterizer.rar](https://www.webforum.nu/a/3981.rar)

Permalänk: https://www.webforum.nu/p/1391626

## #5 — Alpha II, 2004-07-21T12:11Z

Problemet är löst! :D

```
unsigned int offset = (int(P.y+0.5)*(nViewportWidth)+int(P.x+0.5))*nBytesPerPixel;
```

Detta fixade det! Glömde att avrunda Kordinaterna innan jag räknade ut vart i minnet pixeln låg :r

Permalänk: https://www.webforum.nu/p/1392250

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/107673-vad-är-det-jag-inte-ser
